2017-10-18 76 views
0

我有一個很好的工作下面的命令鏈:SSH命令鏈不起作用

ssh Module 
cd /MODULE_DIR/workspace/repository/ 
LATEST=`ls -tr *.snapshot | head -1` 
mkdir fresh 
cp ${LATEST} fresh 
exit 

我想把這變成一個bash腳本:

ssh Module "cd /MODULE_DIR/workspace/repository/ && LATEST=`ls -tr *.snapshot | head -1` && mkdir fresh && cp \${LATEST} fresh" 

但它輸出錯誤:

ls: cannot access '*.snapshot': No such file or directory 
cp: missing destination file operand after 'fresh' 
Try 'cp --help' for more information. 

我在這裏錯過了什麼?

回答

2

嘗試在SSH命令中使用單引號而不是雙引號。

Bash的order of expansions將嘗試根據您正在運行它的計算機上的變量分配,在雙引號內部擴展這些變量。

您的命令中的變量可能在本地空白;您可以通過在第一個引號之前添加一個回顯來測試它,並讓服務器回顯接收到的命令。

用單引號括起來應該會讓你的本地終端不嘗試擴展這個變量,讓你連接的盒子來處理它。

+0

謝謝,它的工作。我已閱讀過關於此的所有內容,這就是爲什麼我按照某人的建議逃脫了美元符號「\ $」的原因。爲什麼它不夠? –

+0

第二件事,我希望開發這個腳本以用於不同的模塊 - 然後我將不得不從外部範圍傳遞和擴展變量。 –

+2

反引號也需要轉義,如果你堅持用雙引號。 –