在通过SSH传递的脚本文本中,命令替换无效

时间:2019-09-23 15:53:02

标签: linux bash ssh ls

我尝试使用以下bash访问文件夹的内容;

test_dir="/some_dir/dir_test"

ssh -t -t user@remote-host "
if [ -d '$test_dir' ]; then
    sudo chown -R user:admin '$test_dir'
    echo '$test_dir'/*
    if [ '$(ls -A $test_dir)' ]; then
        sudo rm -rf '$test_dir'/*
        echo '$test_dir'/*
fi"

该脚本尝试检查/some_dir/dir_test是否为空,如果不是,则删除该文件夹中的所有文件;但出现以下错误;

ls: cannot access '/some_dir/dir_test': No such file or directory

/some_dir/dir_test
drwxr-xr-x.  3 sys admin   16 Sep 23 15:03 dir_test

但是,我可以sshremote-hostls -A /some_dir/dir_test

我想知道如何解决它。

1 个答案:

答案 0 :(得分:2)

$(ls -A $test_dir)在客户端而不是服务器上本地执行。您需要转义$。您还需要在其周围使用",否则将不会执行命令替换。

    if [ \"\$(ls -A $test_dir)\" ]; then

执行多行命令的最佳方法通常是使用scp将脚本复制到远程计算机,然后使用ssh执行脚本。混合变量和命令替换的本地和远程扩展变得很复杂,尤其是在需要引用它们时。