Я создаю сценарии npm для проекта, основанного на узлах, и я хотел бы создать сценарий, который сначала открывает новый терминал, а затем выполняет эту команду там. Я сам использую Mac, но другие разработчики могут использовать Linux.

Теперь я хочу сделать команду, которая является перекрестной env таким образом, чтобы она работала в обеих средах. Я знаю, что OS X основана на Unix, поэтому можно подумать, что из-за этого существует простой способ создания сценария кросс-оболочки env, который открывает терминал.

РЕДАКТИРОВАТЬ: я не хочу никаких щелчков мыши. Просто сценарий оболочки, который открывает новый терминал в OS X и Linux.

1 ответ1

2

Там нет кроссплатформенной команды, чтобы сделать это. В то время как 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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .