rob*_*895 5 bash io-redirection shell-script
我的 bash 文件中有几个脚本,它们应该执行某些任务,例如...
#!bin/bash
yum -y update
service restart nginx
yum install atop
cat /var/log/somelog.log > /home/cron/php/script
Run Code Online (Sandbox Code Playgroud)
它一直持续下去,但问题是每执行一项任务,bash 都会向我显示输出。像 service restart nginx例如,输出一些消息。我想隐藏所有这些消息。实现这一目标的普遍接受的方式是什么?因为,我正准备将 STDOUT 重定向到,/dev/null但是,考虑到我有 50 多个连续任务要运行,这意味着我必须执行/dev/null这么多,出于某种原因,这对我来说似乎效率不高。
小智 9
将所有输出重定向为一个块。
(
yum -y update
service restart nginx
yum install atop
cat /var/log/somelog.log > /home/cron/php/script
) > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
您可以保存 stdout 和 stderr 的文件描述符,覆盖它们,并在程序运行后恢复它们:
exec 3>&1
exec 4>&2
exec 1>/dev/null
exec 2>/dev/null
./script-1
./script-2
...
./script-n
exec 1>&3
exec 2>&4
# delete the copies
exec 3>&-
exec 4>&-
Run Code Online (Sandbox Code Playgroud)