我正在编写一个shell脚本,我需要SSH到服务器,执行一些操作,然后退出。
为此,我使用的代码如下:
ssh -t username@server '
cd uploads/; \
tar -xvzf torrent.tar.gz; \
'
但是,我需要使用这样的变量:
DIR="uploads/";
ssh -t username@server '
cd $DIR; \
tar -xvzf torrent.tar.gz; \
'
这似乎不起作用,因为显然在建立SSH连接之前不会执行cd
,到那时就没有$DIR
变量(我的猜测)。但是,有什么方法可以使用变量吗?
也许更好的问题是,在建立SSH连接后,是否有更好的方法可以布置我的脚本来执行操作?我必须小心,逃避撇号,并且有时我实际上是从SSH连接内部连接到另一台服务器。这是丑陋的代码!
修改:请注意,如果我使用“而不是”,该变量将起作用。但我的问题仍然是格式化?
答案 0 :(得分:0)
而不是单引号(')为什么不使用双引号(“),那么应该扩展$ DIR
答案 1 :(得分:0)
使用双引号允许扩展。例如试试这个:
echo "$DIR"
vs
echo '$DIR'
并注意结果。
值得将它包装在shell脚本中:
#!/bin/bash -x
# ...
并且-x将输出shell扩展等。它使生活变得非常容易调试。
您可以使用heredoc,而不是使用上述方法输入命令。 e.g。
ssh username@host <<EOF
ls
EOF
将在远程主机上执行'ls'。
答案 2 :(得分:0)
我想你必须写:
ssh username@server "( cd $DIR; tar -xvzf torrent.tar.gz; )"
这应该在连接后执行.. 如果没有尝试使用(“而不是”(和obviusly然后关闭