この質問の重要な値は、ダッシュ記号「-」を使用して stdin ストリームをリダイレクトすることに関連しています。
次のコード内に基本的なテスト スクリプトがあります。
#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...
この場合、ユーザー入力をエミュレートできるシェルコマンドはどれですか?
ありがとうございました。
cmd1 | cmd2
定義によるパイプラインは、 の標準出力ファイル記述子をcmd1
の標準入力ファイル記述子として接続しますcmd2
。
echo foo | file -
この特定の例はほとんど役に立ちません。このfile
コマンドは、パイプライン内にある種類の一時的なデータに対して実行するのはあまり意味がありません。より有用な例はfile
、ファイルで実行されます。ファイルを絶対に標準入力にしたい場合は、単純な入力リダイレクトでそれを行います。
file - </path/to/example/file
または、これを探しているかもしれません:
file $(locate example/file)
wherelocate
は、 への実際の入力引数として必要なファイルへのフル パスを出力するコマンドの例ですfile
。
おそらくヒアドキュメントが必要です:
#!/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
シェルの展開が発生します。必要なときに便利です。