2012-05-22 27 views
0

我使用SSH Secure Shell客戶端連接到服務器並運行我的腳本。退出在Bash中無法正常工作

我想停止某些條件的腳本,所以當我使用退出,不僅腳本停止,但服務器的所有客戶端斷開連接!這裏是代碼:

if [[ `echo $#` -eq 0 ]]; then 
     echo "Missing argument- must to get a friend list"; 
     exit 
fi 

for user in $*; do 
     if [[ !(-f `echo ${user}.user`) ]]; then 
       echo "The user name ${user} doesn't exist."; 
       exit 
     fi 
done 

一張圖片的客戶:
enter image description here

爲什麼會發生這種情況?

+0

您可以直接使用變量值,而無需在一對反引號內調用echo;只是'如果[[$? -eq 0]];'和'if [[! -f「$ user.user」]]'應該可以正常工作。 – chepner

+0

在$ *''''用戶中使用'而不是'用戶$'' –

回答

2

您使用source來運行該腳本,它將在當前shell中運行該腳本。這意味着exit終止當前的shell和那個ssh會話。

取代sourcebash,它應該工作,或最好把

#!/bin/bash 

到文件中,並使其可執行。

0

如果您從當前shell運行,退出將明顯退出shell並斷開連接。嘗試從目前在新shell中運行它(使用腳本之前。)或者使用的,而不是退出「迴歸」

+0

'.'',然後腳本與'source'完全相同。而'return'只能在funcion中使用。 – mata

+0

@mata:參見'help return':「導致一個函數或*源腳本*退出」 –

+0

@丹尼斯威廉姆森 - 哦,坦克。它甚至會這樣說,如果你在bash中鍵入'return':'只能'從函數或源腳本'返回'......至少應該嘗試過。 – mata

2

exit回報 - 如果您已通過直接運行它啓動的腳本,這將退出該腳本在運行shell從功能

return回報源文件(TY丹尼斯威廉姆森) - 同樣的事情,但它並沒有終止當前的shell。從

break回報 - 以return類似,但可以在任何地方使用一個循環內停止處理多個項目。這可能是你想要的。

+1

+1 - 'return'也會從源文件返回。 –

+0

@丹尼斯威廉姆森:你說得對,修改答案。 – l0b0

+0

+1 - 'return'也會接受一個返回值。 '內建幫助退回' '內建幫助退出' –