0

だから私はまたはなどのコマンドの意味を理解してい1>&2ます2>&1が、私の質問はなぜそのようなコマンドを使用するのですか?stdoutをstderrにリダイレクトしますか、それともstderrからstdoutにリダイレクトしますか?

また、 $[$1 $sign $2]コマンド(単純な計算機に使用)$signの場合、Unixのデフォルトのコマンドはありますか?どういう意味ですか?括弧の外側にある$はどうですか?

4

2 に答える 2

2

1 つの価格のための 2 つの質問。それらはほとんど完全に無関係であるため、2 つの質問として尋ねたほうがよいでしょう。

I/O リダイレクト

  • なぜあなたは使うの1>&2ですか?

    一般的な理由は、シェル スクリプトがstderrではなく でエラーを報告するためですstdout。例えば:

    if [ ! -f "$file" ]
    then
        echo "$0: no such file - $file" >&2
        exit 1
    fi
    
  • なぜあなたは使うの2>&1ですか?

    コマンドからのすべての出力を取得したいと考えています。たとえば、時間findがかかるコマンドを実行しようとしている場合は、次のように記述できます。

    find $HOME -name '*perq*' -print > log.file 2>&1 &
    

    からのすべてのデータとエラー メッセージfindは に送信され、log.file後でコマンドが完了したときに調べることができます。

([テスト) コマンド

について質問し$[$1 $sign $2]ます。

これには非常に多くの問題があり、首尾一貫して答えることは困難です。$1電卓についての質問は、おそらくは数字 (13 を使用しましょう) であるはずであり$2(9 を使用しましょう)、または の$signいずれかである可能性がある+ことを示唆しています-

  • $[$[13通常、変数として定義されていないため、シェルはPATH でコマンドを見つけようとし、(通常は) 失敗します。

    もしあなたが書いていたら[ $1 $sign $2 ]、私たちはもっとうまくやったでしょう. コマンド[( とも呼ばれますtest) があります。通常はシェルに組み込まれていますが、元々は別の実行可能ファイルでした (そして、最近のシステムでも (/usr/bin/testまたは/bin/test) および/usr/bin/[(または/bin/[) 実行可能ファイルが存在することがよくあります。すべてのコマンドと同様に、名前 ( [) は別のコマンドであることに注意してください)。その引数はスペースで指定します.[コマンドは最後の引数が である必要があります]. 式は次のようになります:

    [ 13 + 9 ]
    [ 13 - 9 ]
    

    ただし、testコマンドは反対します。算術はサポートしていません。文字列比較=!=;はサポートしています。-eq-ne-lt-le-gtまたはとの数値比較をサポートしています-ge

算術演算を行いたい場合は、exprコマンドを使用するか、組み込みの代替手段のいずれかを使用します。

x=$(($1 $sign $2))

$signこれにより、変数 に( の値に応じて) 22 または 4 が割り当てられますx

于 2013-03-17T03:34:27.733 に答える
1

リダイレクトの答え:

Unix では、データ/テキスト ファイルは、OS が処理中にファイルを区別して識別するのに役立つファイル ハンドラ (整数値) と呼ばれるものに内部的に関連付けられています。unix のすべてのものは、入出力デバイスも含めて file と見なされます。

標準入力はキーボード、標準出力は標準出力、つまり標準エラー出力ファイル ストリームとしても機能するモニターです。これらはすべてデフォルトでファイルとして関連付けられているため、番号が割り当てられています ....0、1、および 2.

したがって、 2>&1 のようなものを使用すると、基本的にOSにstderr(2)データをstdout(1)データストリームに入れるように指示します

answer for $ sign : ここでのドル記号は、変数の値にアクセスする方法です。

以下のような変数がある場合の例::

Nitin@Kaizen > a=5 
Nitin@Kaizen > echo a --> will just print a 
Nitin@Kaizen > echo $a --> will print 5  

注: $a は ${a} または $[a] と同じで、変数の値にアクセスします .... 一種の逆参照

$[$1 $sign $2] :: ステートメントを発行します

Nitin@Kaizen > a=5
Nitin@Kaizen > b=3
Nitin@Kaizen > sign=+
Nitin@Kaizen > echo `expr $[ $a $sign $b ]`
    8   --- output is same as 5 + 3 , the value of a + b 

あなたが混乱している理由の答え:

本をもう一度完全に読むには、少し努力する必要があります。これらは非常に基本的なものであるため、少しプログラミングして勉強すれば明確になります。

ファイル システム (UFS) に関する章とスクリプトに関する章をカバーする優れた UNIX の基本的な本であれば、何でも構いません。

お役に立てれば。

于 2013-03-17T02:59:27.127 に答える