【问题标题】:Here document is cutting off commands这里的文件正在切断命令
【发布时间】:2022-01-29 05:23:21
【问题描述】:

我正在尝试通过 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(见下面的截图)。

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

提前感谢您的帮助!

【问题讨论】:

  • 确保你的脚本没有使用 DOS 行尾。
  • 还有其他事情发生; APP_development1.sh 没有出现在您上面发布的代码中。
  • @chepner 对不起,我在那里犯了一个错误。我更新了代码。
  • @chepner 根据notepad++,结尾已经是UNIX格式(LF)
  • 使用-m commands.sh 选项从文件中读取脚本时是否会出现同样的问题?此外,您可以尝试更新目标机器上的 ssh 服务器。要么 ssh 服务器正在丢弃第一个字符,要么 ssh 客户端不发送它们。

标签: bash ssh


【解决方案1】:

看来问题出在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
)"

或者,您可以将命令保存在文件中并使用-m commands_file 选项运行plink

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多