2013-08-20 53 views
1

我相信我已經爲我的if else語句正確設置了所有內容,但是它不斷向我的shell終端輸出內容,就像我自己運行命令一樣。無論如何,我可以逃避這個,所以我可以運行這些命令沒有它從結果填充我的終端文本?停止輸出終端中的bash腳本

#!/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

在輸出中你不想看到什麼? –

+0

只是一個問題:你在這裏期待的行爲是什麼'echo「進程正在運行。」 &echo $!' – Craig

回答

0

追加>> /path/to/outputfile/outputfile.txt到的每一個呼應結束後聲明

echo "Process is running." >> /path/to/outputfile/outputfile.txt 

或者,將輸出發送到文件時,你從shell運行腳本

[~]# sh check.sh >> /path/to/outputfile/outputfile.txt 
+0

你不需要那樣做。 – Craig

+0

@克雷格你確實提出了一個更好的方法 - 當時我還沒有發佈。我的建議確實有效,你的方法只是更好 – kakoma

+0

@kakoma在某些情況下,你的「解決方案」「起作用」,但它也可能導致更多的錯誤(比如沒有正確的權限等)。有不好的解決方案,有適當的解決方案,你的是前者。 – Jite

0

如果你想重定向「正常(標準輸出)」輸出使用>/dev/null,如果你也想重定向錯誤輸出以及使用2>&1 >/dev/null

$ command 2>&1 >/dev/null 
1

你有兩個選擇:

  • 可以標準輸出重定向到使用> /path/to/file
  • 日誌文件0
  • 您可以在標準輸出重定向到/dev/null擺脫它完全使用> /dev/null

如果你想要錯誤輸出重定向以及使用&>

here

此外,爲了這個特殊的不相關例如,但是一些bash命令支持「安靜」或「無聲」標誌。

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

我認爲你必須將stdout(也可以是STDERR)Python解釋的:

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

欲知詳情,請看看Bash IO-Redirection

希望有所幫助。 * Jost