Там нет кроссплатформенной команды, чтобы сделать это. В то время как macOS использует Unix, терминальные приложения в macOS и Linux совершенно разные, и у пользователя могут быть установлены разные терминалы. В macOS это может быть Terminal.app, iTerm2 или другие, а в Linux у вас могут быть люди, использующие GNOME Terminal, Konsole, Terminator и т.д., Или вообще не работающие с графической средой. Вы рассматривали это?
Способы открытия приложений также различны в разных ОС. Вы должны написать отдельные функции для обеих операционных систем.
Macos
Под 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
).