我有一个命令,我正在尝试通过SSH运行,但我不知道如何在引号中正确包装它。以下是2次尝试,没有一次是我想要的。
A)命令用双引号括起来
version=1.1
ssh nrichard@myserver.com "
cd /home/nrichard/${version}
ls | while read filename ; do
echo $filename
hive -f $filename &
done"
这将能够转到正确的目录/home/nrichard/1.1 但是while循环不起作用,因为在通过ssh发送命令之前,$ filename被空字符串替换。 另一方面......
B)命令用单引号
包装version=1.1
ssh nrichard@myserver.com '
cd /home/nrichard/${version}
ls | while read filename ; do
echo $filename
hive -f $filename &
done'
这将无法转到正确的目录/home/nrichard/1.1。它将尝试转到'/ home / nrichard / $ {version}',它不是存在的目录,也不是我要去的目录。 但是while循环可以正常工作。
关于如何使这项工作的任何想法?
答案 0 :(得分:2)
答案 1 :(得分:1)
如何使用双引号括起整个内容来转义您不希望shell扩展的变量?
version=1.1
ssh nrichard@myserver.com "
cd /home/nrichard/${version}
ls | while read filename ; do
echo \$filename
hive -f \$filename &
done"