linux - 如何使脚本显示并将其自己的输出保存到唯一的文件名?

标签 linux bash

我有一个基本的 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/

相关文章:

c - FUSE 程序中的内存分配是如何工作的?

python - 从 apache httpd 运行 pexpect

linux - 如何理解 ${var :-world}

linux - 在集群上以 sudo 权限运行 MPI 程序

linux - 跟踪 ksh 多个 session 的命令历史记录

regex - 从目录树列表中过滤特定行

Linux:合并多个文件,每个文件在一个新行

linux - 在 Linux/Unix 中将密码从文件导入 CLI 命令参数

json - Cloudformation echo json 环境变量

c# - 在 CentOS 上使用 Mono 与使用 Microsoft IIS 一样好