2009-07-03 8 views
0

この質問はthis threadに基づいています。Less 'コマンドのバグを修正するには、noと入力します。パラメータの

コード

function man() 
{  
    man "$1" > /tmp/manual; less /tmp/manual 
} 

問題:私も一つの選択肢を使用している場合は、コマンドが知らないところで、-たかったマニュアル例えば

man -k find 

は参照が間違っているため私にエラーが表示されます。コマンドは-kをマニュアルと解釈します。

擬似コード言い換えれば

if no parameters 
    run the initial code 
if one parameter 
    run: man "$2" 
... 

で問題を解決するための私の試み、我々はオプションチェックなど

擬似コード

その先頭にを追加する必要があります
man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual 

ここで、$ n

  • のn = 1、ゼロであればオプション
  • n = 2の1つのオプション
  • n = 3の2かのオプション
  • 場合....

どのようにあなたは、このような「オプションをすることができます$ nの値を変更できることを確認しますか?

開発問題:以下のバグは何すべての引数

function man() 
{  
    man [email protected] > /tmp/manual; less /tmp/manual 
} 

を渡し、約2から状況のため、ループの場合はn = 1からn = 2

+0

@ありがとうございました! –

答えて

2

方法を作るためにあなたはタイトルに言及していますか?

+0

$ @はおそらく引用されるべきです。さもなければ 'man 'は' man one two'と解釈されるかもしれません。 –

1

まず、$*または[email protected]を使用して、すべての関数の引数をmanに渡すことができます。あなたはその2つの違いに関する詳細についてはman shを読むことができます。短編小説は、ほとんどの場合、二重引用符で"[email protected]"を使用することです。

第2に、一時ファイルは不要です。あなたが直接lessmanの出力をパイプによってこの小さなクリーナーを作ることができる:

function man() { 
    man "[email protected]" | less 
} 

をところで、あなただけの別のページャを使用しようとしている場合(manmoreを使用して、あなたはless手の込んだをしたいです)デフォルトのページャーを無効にするように設定することができる一般的に認識されているPAGERという環境変数があります。

export PAGER=less 

をあなたは$#で引数の数を確認することができ、あなたの正確な質問に答えるために:あなたは、出力の複数の画面を表示するときにlessを使用するすべてのプログラムを伝えるために、たとえば、あなたの~/.bashrcにこれを追加することができ

if [ $# -eq 0 ]; then 
    : # No arguments 
elif [ $# -eq 1 ]; then 
    : # One argument 
# etc. 

shiftコマンドが役立つ場合もあります。 $2$1$3$2などの名前に変更されます。これは、ループでコマンドライン引数を1つずつ処理することがよくあります。

while [ $# -gt 1 ]; do 
    echo "Next argument is: $1" 
    shift 
done 

echo "Last argument is: $1" 
+0

$ *はOS/Xでは機能しません。 –

+0

私はMac上で動作しています。あなたはsh互換のシェルが必要です。 –

関連する問題