if [ -z "$OPTION" ] # if option is not given(empty) then:
then
command1 --defaultOption
else
command1 $OPTION
fi \
2> >( function1 "$DETAILS" ) \
< <( command2 "$OTHER_DETAILS" )
私はstderrをファイルとして指定し、stdinにファイルを入力してif文と対話する方法について非常に混乱しています。よく知られているものは次のとおりです。
2>filename# Redirect stderr to file "filename."
2>>filename# Redirect and append stderr to file "filename."
command < input-file > output-file
< input-file command > output-file
私の推測は次のとおりです
command2 は、--defaultOption ($OPTION が空の場合) を使用して command1 の標準入力に渡すか、または $OPTION ($OPTION が空でない場合) を使用して command1 の標準入力に渡すファイルを生成します。 command1のstderrはfunction1にリダイレクトされます(たとえば、進行状況バーの一種の表示など)。
だから私の質問は次のようになります
かっこ< <
の間にスペースが> >
必要ですか?実際に追加されましたか(空白を無視)、それとも「二重」リダイレクトですか?括弧と中括弧の間の相互作用が>(
ありませんか<(
?どのようにしてif評価に影響しますか?それとも-z $OPTION
テストしたばかりですか?
command2の出力ファイルをディスクに書き込んでから、オプションを確認してif文で再度読み込むと、何が起こっているのかをよりよく理解できますか?
command2 "$OTHER_DETAILS" --out=file.txt
if [ -z "$OPTION]
then
command1 --defaultOption --in=file.txt 2>function1
else
command1 "$OPTION" --in=file.txt 2>function1
fi
これは私が見つけたスクリプトの一部です。 http://linuxtv.org/wiki/index.php/V4L_capturing/script (912号線~924号線)
ベストアンサー1
<(cmd)
シェル構文(プロセス置換と呼ばれる)です>(cmd)
。これはファイルパスに置き換えられます。
cmd1 <(cmd2)
~になる
cmd1 /path/to/file
ファイルの内容は出力なcmd2
ので、読み取ることができ、書き込むことはできません。一例:
start cmd:> ls -l <(echo foo)
lr-x------ 1 hl hauke 64 5. Jan 03:49 /dev/fd/63 -> pipe:[3125128]
この場合、引数ls
と見なされます。/dev/fd/63
あなたの場合、このパスはリダイレクトの一部になります。したがって、スペースは必須です。> >(cmd)
「stdoutを内容がcmdに入力される一時ファイルにリダイレクトする」ことです。これはファイルと見なされるため、>>(cmd)
シェルが「有効」である必要があるため、エラーが発生します>>
。>>'(cmd)'
(cmd)
start cmd:> echo foo >>'(cat)'
start cmd:> cat \(cat\)
foo