停止bash脚本在终端输出

时间:2013-08-20 12:19:58

标签: bash if-statement

我相信我已经为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)...

5 个答案:

答案 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
相关问题