Heredoc 中没有这样的文件或目录,Bash

No such file or directory in Heredoc, Bash

我对 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: No such file or directory

这很奇怪,因为如果我使用 SSH 连接并检查以下路径,该文件就存在。

我做错了什么?文件不可执行,只是一个文本文件。 谢谢。

如果您希望 cat 远程 运行,而不是在 heredoc 评估期间本地,请在 $(...):

中转义 $
softwareInstalled=$(cat /home/$user_q/check.txt)

当然,这只有在您的远程脚本的其他部分引用 "$softwareInstalled"(或者,因为它在未引用的 heredoc 中,"$softwareInstalled")时才有意义。