【问题标题】:Press enter key in a shell script and ignore nohup output在 shell 脚本中按 enter 键并忽略 nohup 输出
【发布时间】:2021-01-26 20:50:12
【问题描述】:

我有一个基本的 shell 脚本,用于部署我的包...

我在执行命令时遇到 2 个问题

nohup /home/username/wildfly/wildfly-20.0.1.Final/bin/standalone.sh &

它让我冻结并说出下面的话

nohup: redirecting stderr to stdout

如果我以正常方式运行此命令,我应该按 ENTER 并且该进程将继续在后台正常运行。 那么,我的问题是有什么方法可以模拟那个 ENTER 键击?

我还有一个scp命令复制一个文件到另一个服务器,执行后需要输入密码,有没有办法通过myscript.sh输入密码然后按ENTER键?

scp /home/username/myfile.war 0.0.0.0:/home/username/myfile.war

提前致谢 :)

【问题讨论】:

  • 您不能与后台进程交互。可以想象,您可以使用expect 来处理交互,但是为此目的而明文存储密码和诸如此类的东西总是一个糟糕的选择。对于 scp,考虑使用 ssh-keypair,可能与 forced_command 结合使用 ...
  • 你能做类似printf '\n' | nohup /home/username/wildfly/wildfly-20.0.1.Final/bin/standalone.sh & 的事情来模拟按ENTER吗?
  • 如之前的评论中提到的,您需要像expect 这样的工具来为此类需求提供通用解决方案。对于 shell 脚本,看看我的sexpect

标签: linux bash shell


【解决方案1】:

它实际上不应该冻结你,只是看起来令人困惑,因为它有“nohup:”消息你的下一个命令的提示符之后(然后你需要按 enter 来获得一个新的提示符)。但是您应该能够通过自己重定向 stdout 和 stderr 来避免该消息:

nohup /home/username/wildfly/wildfly-20.0.1.Final/bin/standalone.sh >/dev/null 2>&1 &

这会将 stdout 和 stderr 都发送到 /dev/null,因此 nohup 不必处理它们。

【讨论】:

  • 谢谢你,它解决了第一部分,对于另一个服务器的 SCP 命令,我将使用 ssh-keypair 来完成。请将此添加到您的答案中,因此它将包含完整的解决方案,我会将其标记为正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
相关资源
最近更新 更多