file_name << blah"コマンドを理解する方法は?">
次のコマンドでは、catはhere-docの内容を取得し、confというファイルにリダイレクトします。
cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF
ここでコマンドの順序を理解する方法は?他のすべてbash
(ここではドキュメントセクション)が最初に処理され、次に最後のステップとして> conf
セクションであるように見えますか?
ベストアンサー1
ここのドキュメントシェルリダイレクトなので、シェルは通常からリダイレクトのように実行します。 POSIX は次のように定義します。
コマンドが複数のリダイレクト演算子を指定する場合、評価順序は最初から最後までです。
コマンドで最初に書き込み用のファイルを開いたり切り捨てたりしますcat
。> conf
conf
Here-Document
以下を使用してstrace
確認できます。
$ strace -f -e trace=open,dup2 sh -c 'cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF
'
...
open("conf", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(3, 0) = 0
...