在Heredoc,Bash

时间:2017-01-04 17:52:09

标签: bash heredoc

我对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连接并检查以下路径,该文件是存在的。

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

1 个答案:

答案 0 :(得分:1)

如果您想让cat远程运行​​,而不是在heredoc评估期间本地运行,请转义$中的$(...)

softwareInstalled=\$(cat /home/$user_q/check.txt)

当然,如果远程脚本的其他部分引用"$softwareInstalled"(或者,因为它位于未引用的heredoc "\$softwareInstalled"中),这只有意义。