2

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

5 回答 5

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
于 2013-08-20T12:30:02.323 回答
2

如果您想重定向“正常(stdout)”输出>/dev/null,如果您还想重定向错误输出,请使用2>&1 >/dev/null

例如

$ command 2>&1 >/dev/null
于 2013-08-20T12:24:58.977 回答
2

我认为您必须重定向python解释器的STDOUT(可能是STDERR):

...
  echo "Process is not running... Starting..."
  python likebot.py >/dev/null 2>&1 &
...

有关更多详细信息,请查看Bash IO-Redirection

希望能有所帮助。*约斯特

于 2013-08-20T12:31:40.153 回答
1

你有两个选择:

  • 您可以使用重定向标准输出到日志文件> /path/to/file
  • 您可以使用重定向标准输出以/dev/null完全摆脱它> /dev/null

如果您还希望重定向错误输出,请使用&>

这里

此外,与此特定示例无关,但某些 bash 命令支持“安静”或“静音”标志。

于 2013-08-20T12:27:06.243 回答
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
于 2013-08-20T12:23:29.170 回答