abra uma nova guia no iTerm e execute o comando lá


17

Eu encontrei uma maneira de abrir uma nova guia em iTerm:

newtabi()
{
    osascript -e 'tell application "iTerm" to activate' -e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down'
}

E eu quero executar alguns comandos na nova guia. Que seja comando simples pwd. Como fazer isso?

Se eu correr ...

newtabi && pwd

A nova guia é aberta conforme o esperado, mas o pwdcomando é executado não na nova guia, mas na antiga, onde eu digiteinewtabi && pwd

Eu uso zsh. Meu sistema operacional éOS X 10.8.5

Respostas:


16

Use tell session -1 of current terminal to write text "pwd":

activate application "iTerm"
tell application "System Events" to keystroke "t" using command down
tell application "iTerm" to tell session -1 of current terminal to write text "pwd"

11
se abriu mais de um iTerms, ele abre nova aba no correto iTerminstância, mas escreve pwdna última guia de primeira instância de iTerm
— Maxim Yefremov

2
@efr Você está certo. Eu editei a resposta para mudar terminal 1para current terminal. Agora, ele deve executar o comando na janela atual, em vez da janela que foi aberta primeiro.
— Lri

2
Isso não funcionou no mac 10.11.6 com o iTerm2. No editor de scripts, "Fim de linha inesperado, mas identificador encontrado" e "terminal" são destacados
— Mike Blandford

11
Isso não funciona mais no macOS 10.14:execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
— KernelSanders 03/02/19

12
osascript \
-e 'tell application "iTerm" to activate' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "ls"' \
-e 'tell application "System Events" to tell process "iTerm" to key code 52'

Eu estou me metendo 148:156: syntax error: Expected end of line but found identifier. (-2741)nisso.
— temporary_user_name

4

Pelo menos no macos Mojave, iTerm 3.2.8, se você executar:

$ open -a iTerm .

Ele será adicionado como uma guia à janela atual.


1

Não consegui obter a resposta aceita para o trabalho. Eu também queria passar vários comandos. Isto é o que eu vim com.

newtabi(){  
  osascript \
    -e 'tell application "iTerm2" to tell current window to set newWindow to (create tab with default profile)'\
    -e "tell application \"iTerm2\" to tell current session of newWindow to write text \"${@}\""
}

Exemplo de uso

newtabi pwd
newtabi 'cd ~/ && pwd'
newtabi 'echo \"Hello New Tab\"'

Para ações mais complexas, eu recomendaria dividir os comandos.

code_folder="/path/to/code"

alias project="cd ${code_folder}/my-project/foo && yarn run start"

Então, newtabi project


Você pode me dizer como posso passar minha corrente pwdpara fazer o comando parecer: `newtabi '$ PWD / foo && yarn run start'?
— Raj

11
@Raj, boa pergunta. Pessoalmente, divido os comandos em aliases e / ou funções mais consumíveis. Eu adicionei outro exemplo. Espero que ajude!
— Marc Barbeau

Muito obrigado, @Marc!
— Raj
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.