命令替换在通过 SSH 传递的脚本文本中不起作用

Command substitution doesn't work in script text passed over SSH

我尝试使用以下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

我想知道如何解决它。

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

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

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