私は2つのシェルスクリプトを持っています.1つはメインの "プログラム"として機能し、もう1つは "ライブラリ"として機能します。stderrを使わずにstdoutをファイルにリダイレクトした後に端末に書き込む?
「プログラム」内のいくつかの場所では、log "$thing" >> "$logfile"
のようになります。log
は、「ライブラリ」で定義されている関数です。
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
私の質問:stderr
を使用してせずに戻って、端末に関数からの出力の一部をリダイレクトする方法はありますか?
stderr
の使用を避けたい、とすべき # library.sh
log() {
# This gets written to the log
echo "`date --rfc-3339=seconds`: $1"
# How to write this to the terminal *without* using stderr?
echo "Info: Message written to log." >&2
}
端末に表示されます。
を...あなたは何が起こっているかを説明することができます?また、最初の3行のポイントは何ですか?最後の2つでうまくいくようです。そして、 'log'が呼び出されるたびに' program.sh'を実行するのではなく、 'program.sh'に4行目を入れるべきでしょうか? –
最初の3行は、元のディスクリプタが現在役に立たないことを示しています。これは、より複雑なプログラムのための簡単なスタンドインです。 – sarnold
最初の3つは、スクリプトが外部に話す他の方法を持っていないことを示しています(たとえば、他のことをやっているなど)。私はlibrary.shに 'exec'行を置きますが、その場合に備えてより高い数字(例えば、8程度)を与えます。 –