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"
)时才有意义。
我对 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"
)时才有意义。