1

test と input1 の 2 つのファイルがあります。以下は私の「テスト」ファイルです:

echo $1 $2

出力の変更は、ターミナルに書き込むときと同じように機能します。

./test foo bar > input1 

文字列「foo bar」がinput1に書き込まれます。それでも、ターミナルに書き込むと:

./test < input1

端末に出力されるのはスキップされた行だけです。

「foo bar」が端末に出力されない理由はありますか?

4

3 に答える 3

0

これは、testが標準入力をエコーし​​ないためです。コマンド引数をエコーし​​ます。

$1$2は、コマンド ラインの最初と 2 番目の引数を表し、テストがエコーするものです。

より小さい ("<") 表記は標準入力 (デフォルトでは、対話型シェルのコンソール) をリダイレクトし、testに送信された標準入力をinput1から取得するようにリダイレクトしていますが、testは標準入力を調べません。コマンドライン引数のみを調べます。

シェルが期待どおりに動作するようにするには、input1の内容を取得し、それをtestに渡されるコマンド引数に入れる必要があります。

おそらくこれはあなたが意図したものです:

./test $(cat input1)
于 2012-11-30T03:45:17.803 に答える
0

やりたいことをするには、次のことを行う必要があります。

./test `cat input1`

このように、input1 の内容は、標準入力としてではなく、引数としてコマンドに渡されます。

input1 の内容が次のとおりであるとします。

a b c

これは、スクリプトを次のように呼び出すのと同じです。

./test a b c

スクリプト内で、a、b、c を変数として受け取ります。

$# = 3
$1 = 'a'
$2 = 'b'
$3 = 'c'

しかし、input1 をスクリプト内の標準入力として使用したいとします。したがって、次のようにスクリプトを呼び出します。

./test < input1

スクリプト内で、input1 の内容を に渡したいとしますgrep。次のようにします。

grep b <1 

これにより、input1 ファイルで文字列 'b' が検索されます。

他の例を見るには、このページを見てください: http://www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html

于 2012-11-30T03:47:25.437 に答える