我对Bash的Heredoc构造行为深感困惑。
这是我正在做的事情:
#!/bin/bash
user="some_user"
server="some_server"
address="$user"@"$server"
printf -v user_q '%q' "$user"
function run {
ssh "$address" /bin/bash "$@"
}
run << SSHCONNECTION1
sudo dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed" > /home/$user_q/check.txt
softwareInstalled=$(cat /home/$user_q/check.txt)
SSHCONNECTION1
我得到的是
cat:/home/some_user/check.txt: 没有这样的文件或目录
这很奇怪,因为如果我使用 SSH 连接并检查以下路径,该文件就会存在。
我做错了什么?文件不是可执行文件,只是一个文本文件。谢谢。
如果您希望cat
在 heredoc 的评估期间远程运行,而不是在本地运行,请转义$(...)
中的$
:
softwareInstalled=$(cat /home/$user_q/check.txt)
当然,这只有在远程脚本的其他部分引用"$softwareInstalled"
时才有意义(或者,因为它在未引用的 heredoc 中,"$softwareInstalled"
)。