在运行自动化脚本时隐藏 bash 的输出。

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)


Hau*_*ing 8

您可以保存 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)