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