我相信我已经为if else语句正确设置了所有内容但是它一直将内容输出到我的shell终端,就像我自己运行命令一样。无论如何我可以逃避这一点,所以我可以运行这些命令,而不用结果中的文本填充我的终端?
#!/bin/bash
ps cax | grep python > /dev/null
if [ $? -eq 0 ]; then
echo "Process is running." &
echo $!
else
echo "Process is not running... Starting..."
python likebot.py &
echo $!
fi
以下是运行我的bash脚本后几分钟输出的内容
[~]# sh check.sh
Process is not running... Starting...
12359
[~]# Your account has been rated. Sleeping on kranze for 1 minute(s). Liked 0 photo(s)...
Your account has been rated. Sleeping on kranze for 2 minute(s). Liked 0 photo(s)...
答案 0 :(得分:3)
如果要从shell脚本中重定向输出,请使用exec:
exec 1>/dev/null 2>&1
这将从现在开始重定向所有内容。如果要输出到日志:
exec 1>/tmp/logfile 2>&1
附加日志:
exec 1>>/tmp/logfile 2>&1
备份手柄以便恢复它们:
exec 3>&1 4>&2
exec 1>/dev/null 2>&1
# Do some stuff
# Restore descriptors
exec 1>&3 2>&4
# Close the descriptors.
exec 3>&- 4>&-
如果您想要沉默脚本的特定部分:
#!/bin/bash
echo Hey, check me out, I can make noise!
{
echo Thats not fair, I am being silenced!
mv -v /tmp/a /tmp/b
echo Me too.
} 1>/dev/null 2>&1
答案 1 :(得分:1)
您有两种选择:
> /path/to/file
/dev/null
> /dev/null
以完全摆脱它
如果您想要重定向错误输出,请使用&>
请参阅here
此外,与此特定示例无关,但某些bash命令支持“安静”或“静默”标记。
答案 2 :(得分:1)
我认为你必须重定向python解释器的STDOUT(可能是STDERR):
...
echo "Process is not running... Starting..."
python likebot.py >/dev/null 2>&1 &
...
有关详细信息,请查看Bash IO-Redirection。
希望有所帮助。 *乔斯特
答案 3 :(得分:0)
追加>> /path/to/outputfile/outputfile.txt 到每个echo语句的末尾
echo "Process is running." >> /path/to/outputfile/outputfile.txt
或者,从shell运行脚本时将输出发送到文件
[~]# sh check.sh >> /path/to/outputfile/outputfile.txt
答案 4 :(得分:0)
如果你想重定向"正常(stdout)"输出使用>/dev/null
如果您还想重定向错误输出,请使用2>&1 >/dev/null
例如
$ command 2>&1 >/dev/null