私はLinuxシェルで複数のコマンドを同時に実行しています。複数のコマンドの出力をファイルにリダイレクト
echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier"
すべての出力をfile1
にリダイレクトするとします。私はそれぞれのコマンドの後に>file1
を追加することができますが、これはかさばるようです。これどうやってするの?
私はLinuxシェルで複数のコマンドを同時に実行しています。複数のコマンドの出力をファイルにリダイレクト
echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier"
すべての出力をfile1
にリダイレクトするとします。私はそれぞれのコマンドの後に>file1
を追加することができますが、これはかさばるようです。これどうやってするの?
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
説明しました。
(echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier") >file1
あなたの場合サブシェルでコマンドを実行する必要はありません。{ ... } > file
:
{ echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier"; } > file1
最後のコマンドの後に&
または改行がない限り、{
の後にスペースが必要で、}
の前にセミコロンが必要であることに注意してください。
説明だけです...これは、基本的には、現在のシェルで、新しいサブシェルやプロセスとは対照的に、*「複合文」*です。 –
'printf'に何かをパイプするのは、標準入力から読み込まないため、無駄です。 – codeforester
@codeforester私の悪い、私は 'xargs printf'を意味しました。一定。 –