2014-12-31 105 views
1

我需要檢查在遠程主機上發佈了一個transacions文件。今天12月31日沒有發佈交易代碼。 我知道這是確定的。昨天有一個。然而,無論我使用哪個日期,30或31,返回碼都是相同的。在bash中檢查ssh remote命令的退出狀態

我正在查看的是ssh的返回狀態,我認爲應該是遠程執行命令的返回狀態 我認爲如果'ls -ltr'工作,'if語句'會以0退出和大於零的東西,如果'ls -ltr'沒有 工作,則爲false。我會認爲'if'語句會查看shh的返回狀態,這應該是遠程執行的命令的返回狀態 - 或者'ls -ltr'

我如何獲得這個工作?

這是針對30 - 這是在遠程主機上,並且是成功的

[email protected]:/scripts$ ssh -q -T [email protected] "ls -ltr /home/DropBox/transactions_20141230.csv" 
-rw-r--r-- 1 rr_prd 2233047 Dec 31 07:26 /home/DropBox/transactions_20141230.csv 

,這是對31沒有報告還爲31,所以它是不成功的

[email protected]:/scripts$ ssh -q -T [email protected] "ls -ltr /home/DropBox/transactions_20141231.csv" 
/home/DropBox/transactions_20141231.csv not found 
[email protected]:/scripts$ 

我不停地翻轉與註釋掉包括hashtag

[email protected]:/scripts$ ssh -q -T [email protected] "ls -ltr /home/DropBox/transactions_20141231.csv" 
/home/DropBox/transactions_20141231.csv not found 
[email protected]:/scripts$ 



#!/bin/bash 
today=$(/bin/date +%Y%m%d) 
#today="20141230" 
echo $today 
if ssh -q -T [email protected] "ls -ltr /home/DropBox/transactions_$today.csv" > /dev/null 2>&1 ; 
    then 
     echo "this worked" 
    else 
     echo "this did not work" 
fi 

但是日期 - 當我使用腳本兩個日期 - 它是成功的,當爲31,它真的應該返回「這並不工作」

[email protected]:/scripts$ 
[email protected]:/scripts$ vim offshore_check 
[email protected]:/scripts$ ./offshore_check 
20141230 
this worked 
[email protected]:/scripts$ vim offshore_check 
[email protected]:/scripts$ ./offshore_check 
20141231 
this worked 
[email protected]:/scripts$ 
[email protected]:/scripts$ 

回答

0

「如果」構建你使用的應該工作,它爲我工作:

$ if ssh -q -T localhost "ls -ltr /does/not/exist"; then echo succeeded; else echo failed; fi 
Password: 
ls: /does/not/exist: No such file or directory 
failed 

我注意到,你ls程序打印的錯誤不是錯誤措辭不同我得到了(我嘗試了兩種不同的系統)。在你的情況下,「文件未找到」,在我的「ls:file:沒有這樣的文件或目錄」。我的懷疑是你在這裏調用的ls命令不是典型的現代Unix命令。您可能正在運行非標準版本,非Unix版本或非常舊的版本,並且對於此特定錯誤,它可能實際上不會退出,且具有非零退出代碼。

+0

它是一個較舊的離岸機器 - - SunOS 5.8 Generic_117350-35 - build-version 020 – capser

0

類似的問題在這裏已經討論過很多次,看到scp return code discussion 1

和300+答案當searching for scp errors

,但給你一個工作的答案,考慮嘗試這種

if 
    ssh -q -T [email protected] "ls -ltr /home/DropBox/transactions_${today}.csv" \ 
    | grep -q "transactions_${today}\.csv" ; 
then 
     echo "this worked" 
else 
     echo "nope" 
fi 

對不起,我沒有任何辦法來測試這一點。 IHD。

IHTH。

1
file="/home/DropBox/transactions_20141231.csv" 
ssh -q -T [email protected] "test -e $file" 
ret="$?" 
case $ret in 
    0) 
    echo "$file exists" 
    ;; 
    1) 
    echo "$file does not exist" 
    ;; 
    *) 
    echo "other problem" 
    ;; 
esac 
相關問題