我想通过以下方式在 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 上,无法测试它。