9

我尝试通过 plink 执行 bash 脚本。脚本看起来像这样:

echo "@ Starting process..."
./bin/process "process.cfg" &
disown %1
echo "@ Done!"

当我在 linux 的终端中执行此脚本时,一切正常。在“完成!”之后 行我得到一个命令提示符(如预期的那样)。

现在,当我通过 plink 运行此脚本时,输出在“完成!”之后停止。行,但 plink 不会返回到命令提示符并“挂起”,直到 +c。

该脚本被放置在一个文件中,并使用 -m 参数提供给 plink

我尝试在脚本末尾添加'logout'、'exit'、'set -e',但没有帮助。在 plink 命令中添加 -batch、-T 或 -N 也没有成功。

有想法该怎么解决这个吗?

4

3 回答 3

6

好的,看来我不得不从终端分离标准输出/错误。在普通终端中,这当然无关紧要,但 plink 正因此而保持“忙碌”状态。

因此,在我的 bash 脚本(执行命令)中,我必须更改:

./bin/process "process.cfg" &

至:

./bin/process "process.cfg" /dev/null 2>&1 &

plink 现在在 bash 脚本的末尾返回正确的“完成”状态。

于 2014-02-07T07:25:45.323 回答
5

plink.exe -P PORT_NUM -v USERNAME@HOST_IP -pw PASSWD "COMMAND >/dev/null &"

  • &会将您的进程移至后台
  • > /dev/null通过让 stdout/stderr 输出到虚拟空设备,允许您的命令静默运行

注意:shell 命令用“双引号”括起来

于 2014-11-22T02:02:26.683 回答
0

Plink 有一个-batch参数可以禁用所有交互式提示。这可能是您需要在这里避免挂起直到 ctrl-C。

于 2014-01-30T12:29:49.140 回答