これは私が使用するスクリプトの簡略化されたバージョンです。簡略化されたバージョンでは、tt はファイルを 1input
行ずつ読み取り、標準出力に出力し、ファイルにも書き込みますlog
。
input
ファイル:
asas
haha
asha
hxa
スクリプト (という名前simple
):
#!/bin/bash
FILE=input
logfile="log"
exec > >(tee "$logfile") # redirect the output to a file but keep it on stdout
exec 2>&1
DONE=false
until $DONE; do
read || DONE=true
[[ ! $REPLY ]] && continue #checks if a line is empty
echo "----------------------"
echo $REPLY
done < "$FILE"
echo "----------------------"
echo ">>> Finished"
出力 (コンソール上):
-bash-3.2$ ./simple
-bash-3.2$ ----------------------
asas
----------------------
haha
----------------------
asha
----------------------
hxa
----------------------
>>> Finished
この時点で、Enter キーを押してスクリプトを終了する必要があります。実行中にコマンド プロンプト-bash-3.2$
が表示されたことに注意してください。
これらの行が原因であることを確認しました:
exec > >(tee "$logfile") # redirect the output to a file but keep it on stdout
exec 2>&1
それらがなければ、出力は期待どおりです。
-bash-3.2$ ./simple
----------------------
asas
----------------------
haha
----------------------
asha
----------------------
hxa
----------------------
>>> Finished
-bash-3.2$
さらに、スクリプトを終了するために Enter キーを押す必要はありません。残念ながら、出力をコンソール (stdout) とログ ファイルの両方に保存する必要があります。
これはどのように修正できますか?