2017-05-26 9 views
0

私はLinuxシェルで複数のコマンドを同時に実行しています。複数のコマンドの出力をファイルにリダイレクト

echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier" 

すべての出力をfile1にリダイレクトするとします。私はそれぞれのコマンドの後に>file1を追加することができますが、これはかさばるようです。これどうやってするの?

答えて

3
exec >file1 # redirect all output to file1 
echo "Line of text1" 
echo "Line of text2" 
exec > /dev/tty # direct output back to the terminal 

それとも、あなたは/dev/ttyを持っていないマシン上にある場合、あなたが行うことができます:あなたは、その後>file1を追加し、コマンドの周りに括弧を使用することができます

exec 5>&1 > file1 # copy current output and redirect output to file1 
echo foo 
echo bar 
exec 1>&5 5>&- # restore original output and close the copy 
0

説明しました。

(echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier") >file1 
+0

'printf'に何かをパイプするのは、標準入力から読み込まないため、無駄です。 – codeforester

+1

@codeforester私の悪い、私は 'xargs printf'を意味しました。一定。 –

3

あなたの場合サブシェルでコマンドを実行する必要はありません。{ ... } > file

{ echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier"; } > file1 

最後のコマンドの後に&または改行がない限り、{の後にスペースが必要で、}の前にセミコロンが必要であることに注意してください。

+1

説明だけです...これは、基本的には、現在のシェルで、新しいサブシェルやプロセスとは対照的に、*「複合文」*です。 –

関連する問題