Est-il possible d'ouvrir un nouvel onglet dans le terminal de Mac OS X à partir de la ligne de commande dans un onglet actuellement ouvert?
Je sais que le raccourci clavier pour ouvrir un nouvel onglet dans Terminal est "CMD + t" mais je recherche une solution basée sur un script exécutée dans la ligne de commande.
echo hello
dans ce nouvel onglet.-e 'tell application "Terminal" to do script "echo hello" in selected tab of the front window'
à la fin de la commande osascript.open -a iTerm ~/Applications/
-e 'tell application "Terminal" to do script "cd /path/to/target/directory" in selected tab of the front window'
. Notez que si le chemin provient d'une variable, vous devrez utiliser une chaîne entre guillemets au lieu de guillemets simples et échapper la chaîne entre guillemets interne, et probablement le chemin lui-même.Mise à jour : Cette réponse a gagné en popularité grâce à la fonction shell publiée ci-dessous, qui fonctionne toujours à partir d'OSX 10.10 (à l'exception de l'
-g
option).Cependant, une version de script plus complète, plus robuste et testée est maintenant disponible dans le registre npm en tant que CLI
ttab
, qui prend également en charge iTerm2 :Si Node.js est installé, exécutez simplement:
(selon la façon dont vous avez installé Node.js, vous devrez peut-être ajouter
sudo
).Sinon, suivez ces instructions .
Une fois installé, exécutez
ttab -h
pour obtenir des informations d'utilisation concises ouman ttab
pour afficher le manuel.En s'appuyant sur la réponse acceptée, vous trouverez ci-dessous une fonction de commodité bash pour ouvrir un nouvel onglet dans la fenêtre actuelle du Terminal et éventuellement exécuter une commande (en prime, il existe une fonction de variante pour créer une nouvelle fenêtre à la place).
Si une commande est spécifiée, son premier jeton sera utilisé comme titre du nouvel onglet.
Exemples d'appels:
CAVEAT : Lorsque vous exécutez
newtab
(ounewwin
) à partir d'un script, le dossier de travail initial du script sera le dossier de travail dans le nouvel onglet / fenêtre, même si vous modifiez le dossier de travail à l'intérieur du script avant d' appelernewtab
/newwin
- passereval
avec unecd
commande comme solution de contournement (voir l'exemple ci-dessus).Code source (coller dans votre profil bash, par exemple):
la source
-g
(n'activez pas le terminal lors de la création du nouvel onglet / fenêtre) et-G
(n'activez pas le terminal et ne modifiez pas l'onglet actif dans le terminal ) - utile, par exemple, lors du démarrage d'un serveur en arrière-plan. Notez que lors de la création d'un nouvel onglet de cette manière, le Terminal doit encore être activé brièvement avant que l'application précédemment active ne soit réactivée.newtab
ne fonctionne malheureusement PAS. La solution de contournement consiste à transmettre uneeval
instruction avec unecd
commande ànewtab
; par exemple:newtab eval "cd ~/Library/Application\ Support; ls"
. Double-quote la totalité de la commande passée àeval
et utilisez l'échappement par barre oblique inverse à l'intérieur.function newtab
etfunction newwin
(cependant, PAS de parenthèses), ce qui devrait éviter la collision avec les alias lors de la définition des fonctions, mais notez que lors de l' invocation, un alias du même nom a la priorité (à contourner l'alias, ad-hoc, citer n'importe quelle partie du nom de la fonction, par exemple:)\newtab
.<name>() { ... }
syntaxe de la fonction POSIX est<name>
soumise à l' expansion d'alias , ce qui rompt la définition de la fonction (erreur d'analyse!) Si un alias<name>
est défini. Ce n'est généralement pas un problème, car dans les scripts normalement appelés, l'expansion des alias est désactivée par défaut. Cependant, dans les scripts SOURCÉS à partir d'un shell INTERACTIF - comme dans les fichiers de profil / d'initialisation - l'extension d'alias EST activée. Correction: utilisez unefunction <name> { ... }
syntaxe non POSIX pour définir la fonction -<name>
n'est alors PAS soumise à l'expansion d'alias.if [ "${BASH_SOURCE}" == "${0}" ]
avec une déclaration de cas il peut être appelé comme un script (par exemplenewtab.sh
,newwin.sh
): gist.github.com/westurner/01b6be85e5a51fda22a6Voici comment cela se fait par bash_it :
Après avoir ajouté ceci à votre .bash_profile, vous utiliserez la
tab
commande pour ouvrir le répertoire de travail actuel dans un nouvel onglet.Voir: https://github.com/revans/bash-it/blob/master/plugins/available/osx.plugin.bash#L3
la source
Cela ouvre un nouveau terminal et exécute la commande "echo hello" à l'intérieur.
la source
do script ""
avec une chaîne vide pour créer un nouveau terminal sans émettre de commande.Si vous utilisez oh-my-zsh (que tout geek branché devrait utiliser), après avoir activé le plugin "osx"
.zshrc
, entrez simplement latab
commande; il ouvrira un nouvel onglet etcd
dans le répertoire où vous étiez.la source
tab
ne semble rien faireLe raccourci clavier
cmd-t
ouvre un nouvel onglet, vous pouvez donc transmettre cette frappe à la commande OSA comme suit:osascript -e 'tell application "System Events"' -e 'keystroke "t" using command down' -e 'end tell'
la source
Je les ai ajoutés à mon .bash_profile afin que je puisse avoir accès à tabname et newtab
Ainsi, lorsque vous êtes sur un onglet particulier, vous pouvez simplement taper
pour organiser tous les onglets ouverts dont vous disposez. C'est bien mieux que d'obtenir des informations sur l'onglet et de les modifier ici.
la source
Je sais que c'est un ancien message, mais cela a fonctionné pour moi:
Pour exécuter une commande comme demandé ci-dessous, il faut du jiggery:
la source
lorsque vous êtes dans une fenêtre de terminal, commande + n => ouvre un nouveau terminal et commande + t => ouvre un nouvel onglet dans la fenêtre actuelle du terminal
la source
Si vous utilisez iTerm, cette commande ouvrira un nouvel onglet:
la source
et vous pouvez passer le répertoire cible en paramètre
la source
Qu'en est-il de cet extrait de code simple, basé sur une commande de script standard (echo):
la source
Avec X installé (par exemple depuis homebrew, ou Quartz), un simple "xterm &" fait (presque) l'affaire, il ouvre une nouvelle fenêtre de terminal (pas un onglet, cependant).
la source