重定向
su - ${username} -c "echo $CATALINA_HOME >/tmp/tmptest.txt" >/dev/null 2>&1
把命令的标准输出和错误输出,重定向到黑洞。
准备知识
0-标准输入流(stdin),
1-标准输出流(stdout),
2-标准错误流(stderr)。
& 表示等同于的意思。
2>&1,表示2的输出重定向等同于1 ####详解
- 这里会把su命令的标准输出(1)重定向到黑洞。
- 接着把错误输出流重定向到标准输出,因为第1步已经把标准输出重定向到黑洞,那错误输出流也就重定向到黑洞了。
最终效果就是命令执行时没有任何输出。
Linux Shell 环境中的输入输出重定向,用符号<和>来表示。0、1和2分别表示标准输入、标准输出和标准错误。
1.重定向标准输出到文件:
cat foo > foo.txt
2.重定向标准错误到文件
cat foo 2> foo.txt
3.重定向标准输出到标准错误
cat foo 1>&2
4.重定向标准错误到标准输出
cat foo 2>&1
cat file.txt > /dev/null 2>&1
apt-get install python3.6 > aaa`date +%F-%H:%M:%S`\.log
nohup ./gameserver.sh start >/dev/null >>shell.out 2>&1 & //也打印到屏幕上也保存到文件中.
也就是说不管command执行正确还是错误,输出都打印到shell.out
5.重定向标准输出,标准错误到同一个文件
cat foo > foo.txt 2>&1或cat foo &> foo.txt
这里第个顺序很重要,先把标准输出重定向到文件,再把标准错误输出到标准输出,因为标准输出已经重定向到文件,所以标准错误与重定向到文件。
>&与&>效果相同
例子,屏蔽提示信息
echo 'xxxxx'|su admin -c "python /etc/zabbix/zabbix_agentd.conf.d/app.py >/tmp/app_num.txt" >/dev/null 2>&1
echo 'xxxxx'|su admin -c "chmod o+rw /tmp/app_num.txt" >/dev/null 2>&1
cat /tmp/app_num.txt