コマンドラインから直接実行すると、stdoutとstderrをスクリプトから次のファイルにリダイレクトできることがわかります。
sh myscript1.sh &>output.txt &
ただし、コマンドラインを使用するのではなく、同じフォルダ内の他のbashスクリプトで上記のコマンドを実行しても機能しません。
端末にstdoutとstderrが表示されますが、output.txtはまったく作成されません。なぜこの現象が発生し、どのように解決しますか?
答え1
これは&>
リダイレクト演算子です。特定bash
。あなたはsh
コマンドラインからスクリプトを実行することに慣れているようです(#!
スクリプト自体の-lineには依存しません)。使用しているスクリプトでこれを行うと機能するという保証はありません&>
。/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
いいえ間違いbash
このコマンドは、ユーザーが期待するようには実行されません。