Sigurd Alnæs Asked: 2024-09-04 02:48:11 +0800 CST2024-09-04 02:48:11 +0800 CST 2024-09-04 02:48:11 +0800 CST heredoc 在 Ubuntu 24.04 中不起作用 772 在两台服务器上升级到 24.04,无法像之前在 22.04 上那样从第一台服务器在第二台服务器上运行远程脚本 (heredoc)。Ubuntu 24.04 中是否删除了此选项? server 1 个回答 Voted Best Answer glenn jackman 2024-09-04T21:15:36+08:002024-09-04T21:15:36+08:00 我假设你的缩进是这样的 #!/bin/bash function getversion() { if backdock="$(cat <<EOF who if vers=$( cat ~/version.txt ) then echo "$vers" exit 0 else exit 1 fi logname EOF )" ssh -t [email protected] "$backdock" then return else false fi } getversion 说“heredoc 在 192.168.1.2 上执行”是不对的,heredoc 是在本地机器上处理的,包括命令和变量替换。结果文本作为参数传递给 ssh 在远程主机上执行。 如果您希望该文本为文字,请引用 heredoc 标记: cat <<'EOF' # ....^...^ # the rest stays the same 请注意,你正在使用一种反模式 if (expression) return true else return false end # expression is already a boolean, just return it return expression ssh 已经以成功/失败状态退出,并且函数退出最后执行的命令的状态: function getversion() { backdock="$(cat <<'EOF' who if vers=$( cat ~/version.txt ) then echo "$vers" exit 0 else exit 1 fi logname EOF )" ssh -t [email protected] "$backdock" } 其他说明: 我们甚至不需要 heredoc,简单的引用也可以 function getversion() { ssh -t [email protected] ' who if vers=$( cat ~/version.txt ) then echo "$vers" exit 0 else exit 1 fi logname ' } logname永远不会执行,其中一个exits 首先发生(可能是我没有理解你的缩进) 捕获版本文件很麻烦,依赖 cat 会失败。 if [[ -f ~/version.txt ]]; then cat ~/version.txt else exit 1 fi
我假设你的缩进是这样的
说“heredoc 在 192.168.1.2 上执行”是不对的,heredoc 是在本地机器上处理的,包括命令和变量替换。结果文本作为参数传递给 ssh 在远程主机上执行。
如果您希望该文本为文字,请引用 heredoc 标记:
请注意,你正在使用一种反模式
ssh 已经以成功/失败状态退出,并且函数退出最后执行的命令的状态:
其他说明:
我们甚至不需要 heredoc,简单的引用也可以
logname
永远不会执行,其中一个exit
s 首先发生(可能是我没有理解你的缩进)捕获版本文件很麻烦,依赖 cat 会失败。