![使用 script 命令进行 stdout 、 stderr 和日志记录](https://linux22.com/image/20941/%E4%BD%BF%E7%94%A8%20script%20%E5%91%BD%E4%BB%A4%E8%BF%9B%E8%A1%8C%20stdout%20%E3%80%81%20stderr%20%E5%92%8C%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95.png)
我有remove.sh
其中包含:
rm -v test.tmp
我有install.sh
其中包含:
script remove.log -c './remove.sh'
我可以做什么,以便无论是否存在,我在屏幕上看test.tmp
不到任何相关消息,但看到脚本命令在其中生成?rm
removed 'test.tmp'
rm: cannot remove 'test.tmp': No such file or directory
remove.log
答案1
如果您的问题是“如何抑制命令的 stderr 输出”,答案将类似于:
command 2> /dev/null
这会将 stderr (又名文件描述符 2)重定向到/dev/null
,它会简单地丢弃它收到的任何内容。
但是,该rm
命令支持该-f
标志,如果文件不存在,这将阻止它生成错误消息:
$ rm file_that_does_not_exist
rm: file_that_does_not_exist: No such file or directory
$ rm -f file_that_does_not_exist
$
答案2
script
对此来说是矫枉过正了。是的,它有效,但这不是脚本的目的。脚本用于直接访问 TTY 且不使用 STDOUT/STDERR 的应用程序。
您可以通过基本的 shell 重定向轻松完成此任务。
./remove.sh &> remove.log