1

この質問の重要な値は、ダッシュ記号「-」を使用して stdin ストリームをリダイレクトすることに関連しています。

次のコード内に基本的なテスト スクリプトがあります。

#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...

この場合、ユーザー入力をエミュレートできるシェルコマンドはどれですか?

ありがとうございました。

4

2 に答える 2

1

cmd1 | cmd2定義によるパイプラインは、 の標準出力ファイル記述子をcmd1の標準入力ファイル記述子として接続しますcmd2

echo foo | file -

この特定の例はほとんど役に立ちません。このfileコマンドは、パイプライン内にある種類の一時的なデータに対して実行するのはあまり意味がありません。より有用な例はfile、ファイルで実行されます。ファイルを絶対に標準入力にしたい場合は、単純な入力リダイレクトでそれを行います。

file - </path/to/example/file

または、これを探しているかもしれません:

file $(locate example/file)

wherelocateは、 への実際の入力引数として必要なファイルへのフル パスを出力するコマンドの例ですfile

于 2013-01-07T16:05:45.657 に答える
1

おそらくヒアドキュメントが必要です:

#!/bin/bash
# This causes the shell to await user input.
file - <<'EOF'
This is what the user
might have typed
if it wasn't in a here document.
${BASH:=head} $(ls | wc -l)
EOF

ヒア ドキュメントは、マーカー ワードのみを含む行まで続きます。この例では、マーカー ワードは EOF です。好きな名前を付けることができます (!がよく使われます)。マーカー ワードを囲む引用符は、ヒア ドキュメントでシェル展開が行われないことを意味するため、最後の行はシェルによって展開されません。( のように) から引用符が欠落している場合、<<EOFシェルの展開が発生します。必要なときに便利です。

于 2013-01-07T16:11:05.647 に答える