OS X 从命令行打开新终端,该终端在 Linux 中同样有效

OS X 从命令行打开新终端,该终端在 Linux 中同样有效

我正在为基于节点的项目创建 npm 脚本,我想创建一个脚本,首先打开一个新终端,然后在那里执行该命令。我自己使用的是 Mac,但其他开发人员可能使用 Linux。

现在我想创建一个跨环境的命令,使其在两种环境中都能正常工作。我知道 OS X 是基于 unix 的,因此人们可能会认为,有一种简单的方法可以创建一个打开终端的跨环境 shell 脚本。

编辑:我不需要任何鼠标点击。只需要一个 shell 脚本,在 os x 和 linux 中打开一个新终端。

答案1

没有跨平台命令可以做到这一点。虽然 macOS 底层使用的是 Unix,但 macOS 和 Linux 下的终端应用程序完全不同,用户可能安装了不同的终端。在 macOS 下,可能是 Terminal.app、iTerm2 或其他,而在 Linux 下,人们可能会运行 GNOME Terminal、Konsole、Terminator 等——甚至根本不运行图形环境。你考虑过吗?

不同操作系统打开应用程序的方式也不同。你必须为不同的操作系统编写不同的功能。

苹果系统

在 macOS 下,启动 Terminal.app 并运行脚本只需:

osascript -e 'tell application "Terminal" to do script "/path/to/script.sh"'

我认为您可以通过检查默认文件关联来获取默认终端(如果它不是 Terminal.app),但如果没有第三方工具duti(如使用 Homebrew 来brew install duti),这会有点麻烦,您可以这样做:

terminal=$(duti -x .command | head -n 1)
osascript -e "tell application \"$terminal\" to do script \"/path/to/script.sh\""

但我猜想duti可以通过检查来逆向工程的功能它的源代码。有关更多信息,请参阅这个帖子

您还可以创建一个.command文件并通过以下方式打开它open

touch example.command
echo "echo foo" > example.command
chmod +x example.command
open example.command

这将自动选择用户定义的终端仿真器。

Linux

在 Linux 下,通常可以使用以下命令访问默认终端x-terminal-emulator

x-terminal-emulator -e "/path/to/script"

确保脚本确实可执行(chmod +x)。

相关内容