这是我使用的脚本的简化版本:在其简化版本中,tt 应该input
逐行读取文件,然后将其打印到标准输出并写入文件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
这时候我需要按回车来终止脚本。请注意,在执行过程中出现了命令提示符-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)和日志文件。
如何解决这个问题?