Não há comando entre plataformas para isso. Enquanto o macOS usa o Unix por baixo, os aplicativos de terminal no macOS e no Linux são completamente diferentes, e o usuário pode ter diferentes terminais instalados. No macOS, isso pode ser Terminal.app, iTerm2 ou outros, e no Linux você pode ter pessoas rodando o Terminal GNOME, Konsole, Terminator, etc. - ou nem mesmo rodando um ambiente gráfico. Você já considerou isso?
As formas de abrir aplicativos também são diferentes entre os sistemas operacionais. Você tem que escrever funcionalidades separadas para ambos os sistemas operacionais.
macOS
No macOS, tudo o que você precisa para iniciar o Terminal.app e executar um script é:
osascript -e 'tell application "Terminal" to do script "/path/to/script.sh"'
Eu acho que você poderia obter o terminal padrão (se não for Terminal.app), inspecionando as associações de arquivo padrão, mas é um pouco complicado sem ferramentas de terceiros, como duti
(Use Homebrew para brew install duti
), onde você faria:
terminal=$(duti -x .command | head -n 1)
osascript -e "tell application \"$terminal\" to do script \"/path/to/script.sh\""
Mas eu acho que a funcionalidade de duti
pode ser submetida a engenharia reversa inspecionando o seu código-fonte . Para mais informações, consulte este post .
Você também pode criar um arquivo .command
e abri-lo via open
:
touch example.command
echo "echo foo" > example.command
chmod +x example.command
open example.command
Isso selecionaria automaticamente o emulador de terminal definido pelo usuário.
Linux
No Linux, geralmente você pode acessar o terminal padrão com x-terminal-emulator
:
x-terminal-emulator -e "/path/to/script"
Verifique se o script é realmente executável ( chmod +x
).