SSH命令链不起作用

问题描述:

我有一个很好的工作下面的命令链: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. 

我在这里错过了什么?

尝试在SSH命令中使用单引号而不是双引号。

Bash的order of expansions将尝试根据您正在运行它的计算机上的变量分配,在双引号内部扩展这些变量。

您的命令中的变量可能在本地空白;您可以通过在第一个引号之前添加一个回显来测试它,并让服务器回显接收到的命令。

用单引号括起来应该会让你的本地终端不尝试扩展这个变量,让你连接的盒子来处理它。

+0

谢谢,它的工作。我已阅读过关于此的所有内容,这就是为什么我按照某人的建议逃脱了美元符号“\ $”的原因。为什么它不够? –

+0

第二件事,我希望开发这个脚本以用于不同的模块 - 然后我将不得不从外部范围传递和扩展变量。 –

+2

反引号也需要转义,如果你坚持用双引号。 –