我尝试使用以下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
但是,我可以ssh
到remote-host
和ls -A /some_dir/dir_test
。
我想知道如何解决它。
答案 0 :(得分:2)
$(ls -A $test_dir)
在客户端而不是服务器上本地执行。您需要转义$
。您还需要在其周围使用"
,否则将不会执行命令替换。
if [ \"\$(ls -A $test_dir)\" ]; then
执行多行命令的最佳方法通常是使用scp
将脚本复制到远程计算机,然后使用ssh
执行脚本。混合变量和命令替换的本地和远程扩展变得很复杂,尤其是在需要引用它们时。