2014-02-24 64 views
2

我正在創建一個遠程變量,其值要分配給unix中的局部變量。下面是代碼 #!/斌/慶典將遠程變量的值分配給unix/linux中的局部變量

INPUT= "test" 
ssh [email protected] 
"if [ -s $INPUT ]; 
then 
    date=\`date\` 
    remote= $INPUT.date 
    $INPUT= \$remote 
else 
    mkdir $INPUT 
fi" 

基本上我將值分配給一個局部變量。在ssh到遠程服務器時,我正在檢查是否存在名稱爲「test」的非空目錄。如果是這樣,那麼我在$ INPUT局部變量附加一個時間戳。代碼工作正常,直到第8行「remote = $ INPUT.date」。但是將遠程變量\ $ remote分配給本地變量$ INPUT不會。我究竟做錯了什麼。謝謝您的幫助。

+0

我不認爲遠程shell可以改變你的本地shell的變量,不。相反,您遠程運行的腳本可能會打印$ remote的值或者什麼都不是,你可以例如使用反引號將其捕獲到變量中,然後使用它來有條件地更新INPUT? – Rup

+0

那麼我該如何做到這一點?將遠程變量導出到本地文件?我嘗試了「cat \ $ remote> file.txt」,但是由於整個代碼(「if .... fi」)在服務器上運行,因此file.txt在遠程服務器上生成。 – user45270

回答

4

正如Rup所說,遠程shell無法設置你的本地shell變量。您需要通過打印出來並使用命令替換來捕獲遠程變量。這SSH命令將做你正在嘗試做的,那麼它會響應你想在$ INPUT存儲修正值:

INPUT="test" 
ssh [email protected] "if [ -s $INPUT ]; then 
timestamp=\$(date) 
echo "${INPUT}.\${timestamp}" 
fi" 

輸出:

test.Monday, 24 February 2014 11:26:41 GMT 

如果你想$ INPUT是改變,然後需要使用整個SSH命令,命令替換:

INPUT="test" 
INPUT=$(ssh [email protected] "if [ -s $INPUT ]; then 
timestamp=\$(date) 
echo "${INPUT}.\${timestamp}" 
fi") 

輸出:

$> echo $INPUT 
test.Monday, 24 February 2014 11:27:47 GMT 

同樣,如果你想給一個變量保存在一個txt文件,這將其存儲在遠程主機上:

ssh [email protected] "echo \$remote > file.txt" 

這將本地存儲它:

ssh [email protected] "echo \$remote" > file.txt