ouvrir un nouvel onglet dans iTerm et y exécuter la commande


17

J'ai trouvé un moyen d'ouvrir un nouvel onglet dans iTerm:

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

Et je veux exécuter certaines commandes dans un nouvel onglet. Que ce soit une commande simple pwd. Comment faire?

Si je cours ...

newtabi && pwd

Le nouvel onglet est ouvert comme prévu, mais la pwdcommande est exécutée non pas dans le nouvel onglet mais dans l'ancien, où j'ai tapénewtabi && pwd

J'utilise zsh. Mon os estOS X 10.8.5

Réponses:


16

Utilisation 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
s'il est ouvert plusieurs fois iTerms, il ouvre un nouvel onglet dans l' iTerminstance correcte , mais écrit pwddans le dernier onglet de la première instance d'iTerm
Maxim Yefremov

2
@efr Vous avez raison. J'ai modifié la réponse pour passer terminal 1à current terminal. Maintenant, il devrait exécuter la commande dans la fenêtre actuelle au lieu de la fenêtre qui a été ouverte en premier.
Lri

2
Cela ne fonctionnait pas sur mac 10.11.6 avec iTerm2. Dans l'éditeur de script, "Fin de ligne inattendue mais identifiant trouvé" et "terminal" sont mis en évidence
Mike Blandford

1
Cela ne fonctionne plus sur macOS 10.14:execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
KernelSanders le

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'

Je m'y mets 148:156: syntax error: Expected end of line but found identifier. (-2741).
temporaire_user_name

4

À partir d'au moins macos Mojave, iTerm 3.2.8, si vous exécutez:

$ open -a iTerm .

Il l'ajoutera sous forme d'onglet à la fenêtre actuelle.


1

Je n'ai pas pu obtenir la réponse acceptée au travail. Je voulais également passer plusieurs commandes. C'est ce que j'ai trouvé.

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

Exemple d'utilisation

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

Pour des actions plus complexes, je recommanderais de casser les commandes.

code_folder="/path/to/code"

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

Alors, newtabi project


Pouvez-vous s'il vous plaît me dire comment je peux passer mon courant pwdpour faire ressembler la commande: `newtabi '$ PWD / foo && yarn run start'?
Raj

1
@Raj, bonne question. Personnellement, je décompose les commandes en alias et / ou fonctions plus consommables. J'ai ajouté un autre exemple. J'espère que cela aide!
Marc Barbeau

Merci beaucoup, @Marc!
Raj
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.