2013-05-14 235 views
0

我想從我的shell腳本運行可執行文件。該可執行文件位於/ usr/bin/to_run。從linux shell腳本運行linux可執行文件

我的shell腳本(調用上述可執行文件)位於/ usr/bin文件夾中。

shell腳本是:

#!/bin/bash 

#kill all existing instances of synergy 

killall synergys 
sh "/usr/bin/synergys" 

if [ $? -eq 1 ]; then 
echo "synergy server started" 
else 
echo "error in starting" 
fi 

我收到一個錯誤說: 「synergys:沒有發現過程」。

當我直接從終端運行相同的東西 -/usr/bin/synergys時,它運行正常,但是在腳本中存在問題。我不明白爲什麼。

預先感謝您。

回答

3

該錯誤來自killall命令,它表示沒有與您的參數匹配的候選進程。

如果你不想收到通知,請在沒有流程匹配,只使用quiet選項:

killall -q synergys 

killall手冊頁:

-q,--quiet
         如果沒有進程被殺死,請不要抱怨。

+0

嘿感謝,清除東西了。 – user590849 2013-05-14 02:12:42

+0

我也想要一個建議。在像我這樣的情況下,製作別名還是寫完整的腳本更好? – user590849 2013-05-14 02:13:08

+0

@ user590849,我傾向於更喜歡腳本(或shell函數)來處理比單線更復雜的事情。另外,因爲別名只是單詞替換,所以不能像'alias fls = find那樣放置參數。 - 名稱$ 1 |更少「 - 它只適用於最後爭論發生的命令。 – paxdiablo 2013-05-14 02:14:23

0

如果/usr/bin/synergys是一個可執行文件,而不是一個shell腳本,你會直接運行它,而不是通過殼:

/usr/bin/synergys 

或者,由於/usr/bin是大多數人的$PATH,你可以簡單地寫:

synergys 

如果/usr/bin/synergys實際上是一個shell腳本,它應該是可執行文件(例如,555個或-r-xr-xr-x權限),你仍然可以只寫synergys來執行它。如果文件/usr/bin/synergys不可執行是一個shell腳本,則只需要使用明確的sh