【问题标题】:run xterm -e without terminating运行 xterm -e 而不终止
【发布时间】:2012-06-06 09:43:25
【问题描述】:

我想在不终止的情况下运行 xterm -e file.sh。

在文件中,我正在向后台发送命令,脚本完成后,它们仍未完成。

我目前正在做的是:

(cd /myfolder; /xterm -ls -geometry 115x65 -sb -sl 1000) 

然后在窗口弹出后

sh file.sh
exit

我想做的是这样的:

(cd /myfolder; /xterm -ls -geometry 115x65 -sb -sl 1000 -e sh file.sh)

不终止并等待后台命令完成。

有人知道怎么做吗?

【问题讨论】:

  • 不要在后台执行命令。这是一个选择吗?
  • 不,我一起跑了几个
  • 我可以建议您探索 GNU screen 作为终端管理器,而不是使用图形终端管理器吗?看看 www.gnu.org/s/screen/。软件包可用于所有风格的 linux(在它们的默认软件包 repos 中)。然后,您可以将 screen 连接到您选择的终端管理器。不是您正在寻找的解决方案,但从长远来看是更好的选择。
  • 我会记住的,下次我就完成一个大项目了:)
  • 也探索wait shell 内置。它等待并用& 报告发送到后台的命令。您需要在脚本末尾使用。在所有后台作业完成之前,它会阻止您的脚本终止。

标签: bash execute terminate xterm


【解决方案1】:

使用hold 选项:

xterm -hold -e file.sh

-hold 打开保持资源,即当 shell 命令完成时,xterm 不会立即销毁它的窗口。它会等待 直到您使用窗口管理器销毁/杀死窗口,或者如果您 使用发送信号的菜单项,例如 HUP 或 KILL。

【讨论】:

    【解决方案2】:

    我尝试了 -hold,它使 xterm 处于无响应状态,需要通过非标准方式(窗口管理器、kill 命令)关闭。如果您希望有一个可以退出的开放式 shell,请尝试将该 shell 添加到命令的末尾:

    xterm -e "cd /etc; bash"
    

    我在Super User 上看到了答案。

    【讨论】:

      【解决方案3】:

      在你的 shell 脚本中使用 wait 内置。它会等到所有后台作业都完成。

      工作示例:

      #!/bin/bash
      # Script to show usage of wait
      sleep 20 &
      sleep 20 &
      sleep 20 &
      sleep 20 &
      sleep 20 &
      wait
      

      输出

      sgulati@maverick:~$ bash test.sh
      [1]   Done                    sleep 20
      [2]   Done                    sleep 20
      [3]   Done                    sleep 20
      [4]-  Done                    sleep 20
      [5]+  Done                    sleep 20
      sgulati@maverick:~$ 
      

      【讨论】:

      • tnx,wait ${!},问题解决了,等到后台最后一个job结束
      • wait 没有 ${!} 等待所有作业。但是wait ${!} 等待最后一个后台 PID。如果最后一个作业在旧作业之前终止,即使旧作业正在运行,您也会退出
      • @jarhead 如果解决了您的问题,请接受答案:)
      【解决方案4】:

      基于以前的答案,如果您指定 $SHELL 而不是 bash,它将使用用户首选的 shell。

      xterm -e "cd /etc; $SHELL"
      

      【讨论】:

        【解决方案5】:

        关于创建单独的 shell,您可能希望在后台运行它,以便您可以在当前 shell 中继续执行更多命令 - 与单独的 shell 无关。在这种情况下,只需添加 & 运算符:

        xterm -e "cd /etc; bash" &
        PID=$!
        
        <"do stuff while xterm is still running">
        
        wait $PID
        

        最后的wait 命令将阻止您的主shell 退出,直到xterm shell 退出。如果没有wait,即使在主 shell 退出后,您的 xterm shell 仍将继续运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-20
          • 1970-01-01
          相关资源
          最近更新 更多