我对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连接并检查以下路径,该文件是存在的。
我做错了什么?文件不可执行,只是文本文件。 谢谢。
答案 0 :(得分:1)
如果您想让cat
远程运行,而不是在heredoc评估期间本地运行,请转义$
中的$(...)
:
softwareInstalled=\$(cat /home/$user_q/check.txt)
当然,如果远程脚本的其他部分引用"$softwareInstalled"
(或者,因为它位于未引用的heredoc "\$softwareInstalled"
中),这只有意义。