【问题标题】:How to get bash to execute all commands in a file (cygwin) [duplicate]如何让 bash 执行文件中的所有命令(cygwin)[重复]
【发布时间】:2026-01-27 05:55:01
【问题描述】:

我有以下命令:

xterm -display :4.0 -e /bin/bash -l /home/script.txt

Script.txt 包含(敏感内容已更改):

#!/bin/bash
set -x
ssh -XY user@255.255.255.0
program &
sleep 3s

现在,当我在 Windows CLI 中运行上述命令时,它会打开一个 xterm 并通过 SSH 连接,并要求输入密码。输入密码后,它停止执行。我set -x 看看正在执行什么,它只执行到 SSH 连接然后停止。

知道发生了什么吗?

【问题讨论】:

  • 答案解释了行为。如果您想了解有关如何获得特定其他行为的信息,那么您需要详细解释您想要实现的目标,因为从您的问题中的散文和代码中根本不清楚。

标签: bash ssh cygwin x11


【解决方案1】:

所以你希望它在 ssh 主机上执行你的program &,但是如果你这样调用它,ssh 不知道这一点,只是打开一个会话。

您可以将命令附加到 ssh 调用中,例如

ssh -XY user@255.255.255.0 'program &'

不确定您希望睡眠在哪里,可能在 ssh 之外?

【讨论】:

  • 然而,这将在 program 启动后立即终止,因为 ssh 会话将结束。
  • 嗯,有趣的一点,我在这里看到的是 & 后台操作符根本不起作用 - 我打算建议将整个 ssh 放在后台,然后密码登录描述OP 不起作用
  • 您可以使用nohup 忽略SIGHUP 通过ssh 发送。即使 ssh 会话结束,这也会让命令运行直到结束。
  • 我无法重现它 - 对我来说,它看起来会简单地忽略 ssh 中的 &,但 nohup 显然是解决方案,我同意 - 我建议我们让OP试一试
最近更新 更多