我有一个基本的 I/O 脚本,我将其称为 test.sh
,其中包含一系列基于用户输入的各种输出。基本示例如下:
echo "Enter username"
read USERNAME
grep $USERNAME /etc/passwd
grep $USERNAME /etc/group
echo "Done"
exit 0
我需要此脚本在运行时显示和保存所有输出。我了解如何使用 tee 传输单个命令以显示并保存到文件中,例如 sh test.sh | tee new.txt
,但我不知道如何让脚本本身保存其整个输出,同时在运行时显示它。
我还想让脚本每次运行时都保存为一个唯一的文件名,文件名是USERNAME-DATETIME.rpt
。我尝试四处研究,但我所能找到的只是如何使用重定向和管道运行脚本,而不是如何在运行时保存脚本本身。
如何显示脚本输出并将其保存为唯一的文件名?
最佳答案
您可以使用 exec
重定向脚本中的所有后续输出(到标准输出) :
exec 1>"/path/to/$USERNAME-$(date -Is).rpt"
(在获取USERNAME
后插入。)
如果您希望同时重定向 stderr 和 stdout,请使用 &
快捷方式(仅限 bash):
exec &>"/path/to/$USERNAME-$(date -Is).rpt"
编辑:请注意 exec 1>file
会将您的所有输出重定向到一个文件。要也在您的终端上显示它(复制它),您可以将 exec
重定向与进程替换结合起来:
exec &> >(tee "/path/to/$USERNAME-$(date -Is).rpt")
关于linux - 如何使脚本显示并将其自己的输出保存到唯一的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741370/