Estou tentando descobrir como executar um comando bash em uma nova janela do Max OS X Terminal.app. Como exemplo, aqui está como eu executaria meu comando em um novo processo bash:
bash -c "my command here"
Mas isso reutiliza a janela do terminal existente em vez de criar uma nova. Eu quero algo como:
Terminal.app -c "my command here"
Mas é claro que isso não funciona. Estou ciente do comando "open -a Terminal.app", mas não vejo como encaminhar argumentos para o terminal, ou mesmo se fiz quais argumentos usar.
Respostas:
uma maneira que posso pensar para fazer isso de início é criar um arquivo .command e executá-lo assim:
ou use applecript:
embora você tenha que escapar de muitas aspas duplas ou não poderá usar aspas simples
fonte
osascript -e "tell application \"Terminal\" to do script \"echo '$variable'\"'
; exit
no final dos comandos de script de shell, comodo script "echo hello; exit"
. Você ainda precisa fechar a janela separadamente.Solução parcial:
Coloque as coisas que você deseja fazer em um script de shell, assim
E não se esqueça de '
chmod +x file
' para torná-lo executável. Então você podee será executado em uma nova janela. Adicione '
bash
' no final do script para evitar que a nova sessão seja encerrada. (Embora você possa ter que descobrir como carregar os arquivos rc dos usuários e outras coisas ..)fonte
/Users/{username}
. Existe alguma maneira de manter a pasta de contexto igual à janela do terminal pai que a abriu?Estou tentando fazer isso há um tempo. Aqui está um script que muda para o mesmo diretório de trabalho, executa o comando e fecha a janela do terminal.
fonte
tab 1 of window id 7433
stdout no shell de inicialização . Para suprimir isso, coloque>/dev/null
antes<<END
.Caso alguém se importe, aqui está um equivalente para iTerm:
fonte
Aqui está mais uma visão disso (também usando AppleScript):
consulte: codesnippets.joyent.com/posts/show/1516
fonte
Fiz uma versão funcional da resposta do Oscar, esta também copia o ambiente e muda para o diretório apropriado
Você pode usá-lo assim:
ou
fonte
TMP_FILE="tmp.command"
pode ser um problema se você iniciar mais de um processo simultaneamente. Eu sugeriria substituí-lo porTMP_FILE=$(mktemp "/tmp/command.XXXXXX")
Aqui está meu script incrível, ele cria uma nova janela de terminal se necessário e muda para o diretório em que o Finder está se o Finder estiver na frente. Ele tem todo o mecanismo de que você precisa para executar comandos.
fonte
Um colega me perguntou como abrir MUITAS sessões de ssh de uma vez. Usei a resposta de Cobbal para escrever este script:
Ao atualizar a lista de comandos (eles não precisam ser invocações ssh), você obterá uma janela aberta adicional para cada comando executado. O
sleep 60
no final existe para manter os.command
arquivos enquanto eles estão sendo executados. Caso contrário, o shell será concluído muito rapidamente, executando o trap para excluir o diretório temporário (criado por mktemp) antes que as sessões iniciadas tenham a oportunidade de ler os arquivos.fonte
Você também pode invocar o novo recurso de comando do Terminal pressionando a
Shift + ⌘ + N
combinação de teclas. O comando que você colocar na caixa será executado em uma nova janela do Terminal.fonte
Eu chamo esse script de trun. Eu sugiro colocá-lo em um diretório em seu caminho executável. Certifique-se de que seja executável assim:
Então, você pode executar comandos em uma nova janela apenas adicionando trun antes deles, como este:
Aqui está o script. Ele faz algumas coisas sofisticadas como passar seus argumentos, alterar a barra de título, limpar a tela para remover a desordem de inicialização do shell, remover seu arquivo quando estiver pronto. Usando um arquivo único para cada nova janela, ele pode ser usado para criar várias janelas ao mesmo tempo.
fonte
$*
todo irá destruir qualquer citação não trivial na entrada. Você quer em"$@"
vez disso.open -b com.apple.terminal
. Obrigado