我正在为基于节点的项目创建 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
)。