这里文档是截断命令

Here document is cutting off commands

我正在尝试通过 SSH 连接到我的服务器并向其发出一些命令。出于某种原因,命令似乎被“关闭”了。

下面是执行 putty 连接和发出 SSH 命令的代码:

./plink.exe ${USER}@${HOSTNAME} -pw ${PASS}<<SSH
cd /some/foo/bar
deploy_artifact.sh --instance development1 some_artifact.ear
APP_development1.sh restart
exit
SSH

对我来说它有效,但在我同事的机器上,发出的 SSH 命令被切断,因此无法正确解释。例如 deploy_artifact.sh 变成了 ploy_artifact.sh (见下面的截图)。

我该如何防止这种情况发生?是什么原因造成的?

在此先感谢您的帮助!

看来问题出在 plink 及其使用方式上。给定的示例将命令作为标准输入发送,但是我在 plink 手册中没有发现任何提及它从 STDIN 读取命令的内容。最好避免未记录的功能,因为它们可能无法正常工作,或者作者可能会在没有任何通知的情况下删除它们。相反,如果你想传递内联命令,你应该将它们作为参数提供,即你要么必须使用带引号的文本,要么可以将 heredoc 包装在 "$(cat *heredoc* )" code 中,例如:

./plink.exe ${USER}@${HOSTNAME} -pw ${PASS} "$(cat <<SSH
cd /some/foo/bar
deploy_artifact.sh --instance development1 some_artifact.ear
APP_development1.sh restart
exit
SSH
)"

或者,您可以将命令保存在一个文件中,运行 plink 带有 -m commands_file 选项。