我熟悉使用 tee,我知道我可以简单地记录输出
script.sh | tee file.log
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个无缝的用户界面。有没有办法在 script.sh 中像上面那样运行 tee ?在这个脚本中,有数百个回声和许多其他正在运行的脚本,很难将每个脚本单独附加到文件中。
您可以在脚本的开头放置一个 exec 命令:
$ cat script1
#!/bin/bash
exec > >(tee file.log)
echo one
echo two
Run Code Online (Sandbox Code Playgroud)
以下是运行 script1 的示例:
$ bash script1
$ one
two
$
Run Code Online (Sandbox Code Playgroud)
观察在脚本输出完成之前返回的 shell 提示。这是因为输出进入一个子进程,并且由于多任务处理的变化无常,它按自己的时间表完成。出于这个原因,我更喜欢下面显示的第二种解决方案:
您可以将整个脚本放在一个 shell 组中,{...}然后重定向该组的输出:
$ cat script2
#!/bin/bash
{
echo one
echo two
} | tee file.log
Run Code Online (Sandbox Code Playgroud)
这可以为任意复杂的脚本完成。放在{开头和} | tee file.log结尾。
示例运行如下所示:
$ bash script2
one
two
$
Run Code Online (Sandbox Code Playgroud)
请注意,输出在提示返回之前整齐地完成。
| 归档时间: |
|
| 查看次数: |
3450 次 |
| 最近记录: |