bashスクリプト内のbashスクリプトからのstdoutとstderrのリダイレクト

bashスクリプト内のbashスクリプトからのstdoutとstderrのリダイレクト

コマンドラインから直接実行すると、stdoutとstderrをスクリプトから次のファイルにリダイレクトできることがわかります。

sh myscript1.sh &>output.txt &

ただし、コマンドラインを使用するのではなく、同じフォルダ内の他のbashスクリプトで上記のコマンドを実行しても機能しません。

端末にstdoutとstderrが表示されますが、output.txtはまったく作成されません。なぜこの現象が発生し、どのように解決しますか?

ベストアンサー1

これは&>リダイレクト演算子です。特定bash。あなたはshコマンドラインからスクリプトを実行することに慣れているようです(#!スクリプト自体の-lineには依存しません)。使用しているスクリプトでこれを行うと機能するという保証はありません&>/bin/shbash

代わりに、標準出力と標準エラーをリダイレクトする移植可能な方法の場合は、次のようにします。

./myscript.sh >output.txt 2>&1

&>または、リダイレクト(および/または他の特定のbash項目)を実際に使用したい場合は、を使用してbash scriptnameスクリプトを実行するか、スクリプトに実行可能ファイルを指す正しい行がbashあり、実行可能であることを確認してからスクリプトを 。#!bash./scriptname


シェルでないbash場合utility &>file

utility & >file

これは次のとおりです。

utility &
>file

utilityバックグラウンドで始まる次の名前が空のファイル(fileすでに存在する場合は切り捨て)を生成します。fileいいえ間違いbashこのコマンドは、ユーザーが期待するようには実行されません。

おすすめ記事