【发布时间】:2020-10-10 00:03:56
【问题描述】:
我知道其他用户已经问过同样的问题,但答案对我不起作用。
我正在尝试通过 ssh heredoc 连接使用 bash 中的数组删除多个文件,但它不起作用不要删除任何文件夹,但是如果我使用 ssh 命令运行相同的命令,它可以工作。
如何修复我的 heredoc ssh 命令?
#!/usr/bin/bash -x
DIRA="/home/developer/Documents/a"
DIRB="/home/developer/Documents/b"
DIRC="/home/developer/Documents/c"
declare -a array=($DIRA $DIRB $DIRC)
ssh -T developer@192.168.0.13 <<- EOSSH
rm -rf "${array[@]}"
EOSSH
【问题讨论】:
-
$(declare -f)是干什么用的?它列出了当前环境中定义的所有函数并将执行输出,从而在远程机器上声明你在本地机器上拥有的所有函数,但你似乎不需要任何这些? -
我使用它来通过 ssh 连接使用我的 bash 脚本函数
-
是的,我不需要,我只是写这个例子的时候忘记删除了
-
问题是
${array[@]}被本地shell 扩展(因为它处理here-doc),但是在远程shell 解析它之前不会应用双引号。将ssh -T developer@192.168.0.13替换为cat,这样你就可以看到发送到远程端的内容,应该更清楚问题是什么。 -
我的意思是尝试使用不起作用的版本
cat,它会告诉你为什么它不起作用。