apri una nuova scheda in iTerm ed esegui il comando lì


17

Ho trovato il modo di aprire una nuova scheda in 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 voglio eseguire alcuni comandi in una nuova scheda. Lascia che sia un comando semplice pwd. Come farlo?

Se corro ...

newtabi && pwd

La nuova scheda viene aperta come previsto, ma il pwdcomando non viene eseguito in una nuova scheda ma in quella precedente, dove ho digitatonewtabi && pwd

Io uso zsh. Il mio os èOS X 10.8.5

Risposte:


16

Utilizzare 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"

1
se aperto più di uno iTerms, apre una nuova scheda iTermnell'istanza corretta , ma scrive pwdnell'ultima scheda della prima istanza di iTerm
Maxim Yefremov,

2
@efr Hai ragione. Ho modificato la risposta per passare terminal 1a current terminal. Ora dovrebbe eseguire il comando nella finestra corrente anziché nella finestra che è stata aperta per prima.
Lri,

2
Questo non ha funzionato su Mac 10.11.6 con iTerm2. Nell'editor di script vengono evidenziati "Fine riga imprevisto ma identificatore trovato" e "terminale"
Mike Blandford,

1
Questo non funziona più su macOS 10.14:execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
KernelSanders,

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'

Ci sto arrivando 148:156: syntax error: Expected end of line but found identifier. (-2741).
temporaneo

4

Almeno macos Mojave, iTerm 3.2.8, se esegui:

$ open -a iTerm .

Lo aggiungerà come una scheda alla finestra corrente.


1

Non riuscivo a far funzionare la risposta accettata. Volevo anche passare più comandi. Questo è quello che mi è venuto in mente.

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 \"${@}\""
}

Esempio di utilizzo

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

Per azioni più complesse, consiglierei di interrompere i comandi.

code_folder="/path/to/code"

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

Poi, newtabi project


Potete per favore dirmi come posso passare la mia corrente pwdper far apparire il comando come: `newtabi '$ PWD / foo && yarn run start'?
Raj

1
@Raj, bella domanda. Personalmente divido i comandi in alias e / o funzioni più consumabili. Ho aggiunto un altro esempio. Spero che sia d'aiuto!
Marc Barbeau,

Grazie mille, @Marc!
Raj
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.