É possível abrir uma nova guia no terminal do Mac OS X a partir da linha de comando em uma guia aberta atualmente?
Eu sei que o atalho de teclado para abrir uma nova guia no Terminal é "CMD + t", mas estou procurando uma solução baseada em script executada na linha de comando.
echo hello
nesta nova guia.-e 'tell application "Terminal" to do script "echo hello" in selected tab of the front window'
ao final do comando osascript.open -a iTerm ~/Applications/
-e 'tell application "Terminal" to do script "cd /path/to/target/directory" in selected tab of the front window'
. Observe que se o caminho vier de uma variável, você precisará usar uma string entre aspas duplas em vez de aspas simples e escapar da string entre aspas internas e provavelmente do próprio caminho.Atualização : Esta resposta ganhou popularidade com base na função shell postada abaixo, que ainda funciona a partir do OSX 10.10 (com exceção da
-g
opção).No entanto, uma versão de script testada com mais recursos e mais robusta agora está disponível no registro npm como CLI
ttab
, que também oferece suporte a iTerm2 :Se você tiver o Node.js instalado, basta executar:
(dependendo de como você instalou o Node.js, pode ser necessário preceder
sudo
).Caso contrário, siga estas instruções .
Depois de instalado, execute
ttab -h
para obter informações de uso concisas ouman ttab
para ver o manual.Com base na resposta aceita, a seguir está uma função de conveniência bash para abrir uma nova guia na janela atual do Terminal e, opcionalmente, executar um comando (como um bônus, há uma função variante para criar uma nova janela ).
Se um comando for especificado, seu primeiro token será usado como o título da nova guia.
Exemplos de invocações:
CAVEAT : Quando você executa
newtab
(ounewwin
) a partir de um script, a pasta de trabalho inicial do script será a pasta de trabalho na nova guia / janela, mesmo se você alterar a pasta de trabalho dentro do script antes de invocarnewtab
/newwin
- passareval
com umcd
comando como uma solução alternativa (veja o exemplo acima).Código-fonte (cole em seu perfil bash, por exemplo):
fonte
-g
(não ative o Terminal ao criar a nova guia / janela) e-G
(não ative o Terminal e não altere a guia ativa dentro do Terminal ) - útil, por exemplo, ao iniciar um servidor em segundo plano. Observe que, ao criar uma nova guia dessa forma, o Terminal ainda precisa ser ativado brevemente antes que o aplicativo anteriormente ativo seja reativado.newtab
, infelizmente, NÃO funciona. A solução alternativa é passar umaeval
instrução com umcd
comando paranewtab
; por exemplo:newtab eval "cd ~/Library/Application\ Support; ls"
. Coloque aspas em todo o comando passadoeval
e use o escape de barra invertida dentro dele.function newtab
efunction newwin
(no entanto, SEM parênteses), de modo que deve evitar a colisão com apelidos ao definir as funções, mas observe que na invocação um apelido com o mesmo nome tem precedência (para ignore o alias, ad-hoc, coloque qualquer parte do nome da função, por exemplo\newtab
:).<name>() { ... }
sintaxe da função POSIX<name>
sujeita a expansão do alias , que quebra a definição da função (erro de análise!) Se um alias<name>
for definido. Normalmente não é uma preocupação, uma vez que em scripts normalmente invocados, a expansão do alias está DESLIGADA por padrão. No entanto, em scripts ORIGINADOS de um shell INTERATIVO - como em arquivos de perfil / inicialização - a expansão de alias ESTÁ ativada. Correção: Usefunction <name> { ... }
sintaxe não POSIX para definir a função -<name>
então NÃO está sujeito à expansão de alias.if [ "${BASH_SOURCE}" == "${0}" ]
com uma instrução de caso para que possa ser chamado como um script (por exemplonewtab.sh
,newwin.sh
): gist.github.com/westurner/01b6be85e5a51fda22a6Veja como isso é feito por bash_it :
Depois de adicionar isso ao seu .bash_profile, você usaria o
tab
comando para abrir o diretório de trabalho atual em uma nova guia.Veja: https://github.com/revans/bash-it/blob/master/plugins/available/osx.plugin.bash#L3
fonte
Isso abre um novo terminal e executa o comando "echo hello" dentro dele.
fonte
do script ""
com uma string vazia para criar um novo terminal sem emitir um comando.Se você usar oh-my-zsh (que todo geek da moda deve usar), depois de ativar o plugin "osx"
.zshrc
, simplesmente digite otab
comando; ele abrirá uma nova guia ecd
no diretório em que você estava.fonte
tab
não parece fazer nadaO atalho do teclado
cmd-t
abre uma nova guia, então você pode passar esta combinação de teclas para o comando OSA da seguinte maneira:osascript -e 'tell application "System Events"' -e 'keystroke "t" using command down' -e 'end tell'
fonte
Eu adicionei isso ao meu .bash_profile para ter acesso a tabname e newtab
Então, quando você estiver em uma guia específica, basta digitar
para organizar todas as guias abertas que você possui. É muito melhor do que obter informações na guia e alterá-las lá.
fonte
Eu sei que esta é uma postagem antiga, mas funcionou para mim:
Para executar um comando conforme solicitado a seguir, é necessário alguns truques:
fonte
quando você está em uma janela de terminal, command + n => abre um novo terminal e command + t => abre uma nova guia na janela do terminal atual
fonte
Se você estiver usando o iTerm, este comando abrirá uma nova guia:
fonte
e você pode passar o diretório de destino como parâmetro
fonte
E este snippet simples, baseado em um comando de script padrão (echo):
fonte
Com o X instalado (por exemplo, do homebrew ou Quartz), um simples "xterm &" faz (quase) o truque, ele abre uma nova janela de terminal (mas não uma guia).
fonte