web-dev-qa-db-ja.com

トラップエコーは、ファイルに書き込むときにコンソールに書き込まれません。

「CTRL + C」を終了すると、次のスクリプトが表示されます

#!/bin/bash
function waa(){
    for i in {1..10}
    do
      echo "start.sh: sleeping $i"
      sleep 1s
    done
}

trap "echo 'GAGA'" TERM

waa >> log.txt

トラップエコー「GAGA」はlog.txtに移動しますか?なぜそのような行動なのですか?非常に直感的ではありませんか?

ありがとう!

1
Gabriel

waaの標準出力をlog.txtにリダイレクトし、スクリプトの実行中にtrapをトリガーしましたwaaechoは、そのコンテキストで実行されます。

エコーをconsoleに移動させたい場合は、それを標準エラーにリダイレクトしてみてください。

trap "echo 'GAGA' >&2 " TERM

(スクリプトの実行中に標準エラーをリダイレクトしていない限り、それは役立つはずです)。

2
Thomas Dickey