在新的终端窗口中运行 bash 文件并在完成后关闭窗口

在新的终端窗口中运行 bash 文件并在完成后关闭窗口

我想通过以下方式在 darwin 上运行 bash 文件:

open -n -a Terminal --args bashfile.sh

bash 文件本身如下所示:

#! /bin/sh
<application> <arguments>

它按预期工作,但是有办法吗进程完成后关闭终端窗口

我已经尝试过exit;exit 0;但没有成功。


部分解决方案

在终端的偏好设置中(终端 > 首选项 > 设置 > Shell) 您可以将“当 shell 存在时”标志设置为close the window if the shell exited cleanly。如果没有发生任何错误,这将关闭终端窗口,但不会关闭应用程序本身。

答案1

如果这是唯一的一个终端窗口,那么您可以尝试从脚本中终止其进程,这将终止在其中运行的终端进程和 bash 脚本。这里最难的部分是确定适合您的终止它的正确方法。最简单的方法是执行以下操作:

killall Terminal

我猜测多个终端窗口在单个进程中运行,这意味着执行此命令后所有窗口都将关闭。

如果您使用其他终端仿真器作为主要工具(如 iTerm),那么这将不是问题。

答案2

你标记但是 shebang 指向/bin/sh。我假设它在你的系统中sh是符号链接到的。bash

尝试

kill $PPID

在脚本的末尾。随着$PPID扩展到 shell 父进程的进程 ID,它应该终止右侧进程Terminal,而让其他实例保持不变。

我的 Ubuntu 上Terminal有 GNUstep 终端模拟器。我不知道它和你的有多相似。

此外,我的Terminal(软件包terminal.app、版本0.9.8-1+nmu1build1、操作系统Ubuntu 14.04.5 LTS)在收到脚本内部的信号时经常出现错误;它会无可救药地挂起。我猜是一个错误。唯一有效的解决方法是使用强制手段:

kill -SIGKILL $PPID

答案3

Bash 手册页有一节关于特殊参数的内容。您需要的是$$,它扩展为当前 shell 的 PID。

kill $$应该可以做你想做的事,尽管我现在在 Win7 上,无法测试它。

相关内容