これをコマンドラインで直接実行すると、stdoutとstderrをスクリプトから次のようなファイルにリダイレクトできることを知っています。
sh myscript1.sh &>output.txt &
ただし、上記のコマンドを実行するコマンドを同じフォルダー内の別のbashスクリプト内に配置すると、コマンドラインを使用する代わりに機能しません。
ターミナルでstdoutとstderrを取得しましたが、output.txtが書き込まれません。これはなぜですか、どうすれば解決できますか?
&>
は、bash
に固有のリダイレクト演算子であることに注意してください。 sh
を使用して、コマンドラインからスクリプトを実行しているようです(スクリプト自体の#!
行に依存していません)。 &>
を使用するスクリプトに対してこれを行った場合、/bin/sh
はbash
でない可能性があるため、動作が保証されません。
代わりに、標準出力と標準エラーの両方をリダイレクトするポータブルな方法として、
./myscript.sh >output.txt 2>&1
または、&>
リダイレクト(および/または他のbash
固有のもの)を使用する場合は、bash scriptname
を使用してbash
スクリプトを実行するか、スクリプトにbash
実行可能ファイルを指す適切な#!
行があり、実行可能であることを確認してから、スクリプトを./scriptname
として実行します。
bash
以外のシェルでは、utility &>file
はと同じになります
utility & >file
これはと同じです
utility &
>file
これは、バックグラウンドでutility
を開始し、file
という名前の空のファイルを作成します(または、file
が既に存在する場合は切り捨てます)。そのコマンドにはerrorはなく、bash
ユーザーが期待することを実行しません。