
編集したくないシェルスクリプトがありますが、その出力を使用する必要があります。シェルに./SomeScript.sh -d
必要な出力を表示します。
ただし、出力をリダイレクトしようとすると空のファイルが表示されます。
./SomeScript.sh -d > temp
cat temp
検査後出力をリダイレクトすると、時々空のファイルが生成されるのはなぜですか?、私も試しましたが、echo $(./SomeScript.sh -d)
コマンドは何も印刷しません。
grep
最初は出力から1行を取得しようとしましたが、何も返されなかったことに気づき、出力をファイルにリダイレクトしようとすると問題に気づきました。なぜこれが起こるのかご存知ですか?
答え1
結果が空のファイルの場合./SomeScript.sh -d > temp
(ただし、画面に出力が表示される場合)、プログラムがstoutの代わりにstderrとして印刷していることを意味します。したがって、stderrもリダイレクトしてみてください。つまり、次を使用します。
./SomeScript.sh -d >temp 2>&1
あるいは、出力を2つの別々のファイルに送信することもできます。
./myScript 1>outtemp 2>errtemp
答え2
使用
./SomeScript.sh -d >> temp
これにより、スクリプトを1行ずつ書き込んで上書きするのではなく、スクリプトの各行を追加します。
編集:一度試してください
./SomeScript.sh -d &>> temp
stdoutだけでなくstderrもリダイレクトしたい場合。
答え3
script -c "./SomeScript.sh -flags" temp
このコマンドは私にとっては効果的ですが、なぜそうなのかわかりません。
答え4
私は同じ問題があり、この解決策を見つけました。
./SomeScript.sh -d | tee temp.txt
時間が節約されますように!