Ouvrir de nouvelles Onglet Terminal en ligne de commande (Mac OS X)
Est-il possible d'ouvrir un nouvel onglet dans Mac OS X du terminal à partir de la ligne de commande dans un cours d'ouverture de l'onglet?
Je sais que le raccourci clavier pour ouvrir un nouvel onglet dans le Terminal est "CMD+t", mais je suis à la recherche d'un script à base de solution exécuté dans la ligne de commande.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
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 osascript de commande.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 est à venir à partir d'une variable, vous aurez besoin d'utiliser une chaîne de caractères entre guillemets au lieu d'une seule cité, et d'échapper à l'intérieure de la chaîne de caractères entre guillemets, et probablement le chemin lui-même.ttab
et il fonctionne très bien.Mise à jour: Cette réponse gagné en popularité basée sur la fonction shell posté ci-dessous, qui travaille toujours à titre d'OSX 10.10 (à l'exception de la
-g
option).Cependant, un plus complet, plus robuste, testé script version est maintenant disponible à la npm registre que CLI
ttab
, qui prend également en charge iTerm2:Si vous avez Node.js installé, exécutez simplement:
(selon la façon dont vous avez installé Node.js, vous pouvez avoir à ajouter
sudo
).Sinon, suivez ces instructions.
Une fois installé, exécutez
ttab -h
concis des informations d'utilisation, ouman ttab
pour afficher le manuel.Bâtiment sur le acceptées réponse, ci-dessous est un bash fonction de commodité pour l'ouverture d'un nouvel onglet dans le courant de la fenêtre du Terminal et éventuellement l'exécution d'une commande (comme un bonus, il y a une variante de la fonction de création d'un nouveau fenêtre à la place).
Si une commande est spécifiée, son premier jeton sera utilisé en tant que nouvel onglet du titre.
Échantillon invocations:
Mise en garde: Lorsque vous exécutez
newtab
(ounewwin
) à partir d'un script, le script est initiale dossier de travail sera le dossier de travail dans le nouvel onglet/fenêtre, , même si vous changez le dossier de travail à l'intérieur du script avant de invoquantnewtab
/newwin
passe -eval
avec uncd
de commande comme une solution de contournement (voir l'exemple ci-dessus).Code Source (à coller dans votre bash profil, par exemple):
-g
(ne pas activer la Borne lors de la création du nouvel onglet/fenêtre) et-G
(ne pas activer la Borne et ne pas modifier l'onglet actif à l'intérieur du 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 façon, le Terminal doit encore être activé brièvement avant que précédemment application active est réactivé.newtab
, malheureusement, ne fonctionne PAS. La solution est de passer uneval
déclaration avec uncd
commande pournewtab
; par exemple:newtab eval "cd ~/Library/Application\ Support; ls"
. Double-citer l'intégralité de la commande passée àeval
, et l'utilisation de la barre oblique inverse d'échappement à l'intérieur.(' -bash: /Users/username/.bash_profile: line 23:
newtab() {'"function newtab
etfunction newwin
(cependant, PAS de parenthèses), ce qui devrait éviter la collision avec des alias si définition les fonctions, mais notez que sur invocation un alias du même nom prend la priorité (pour contourner les alias, ad-hoc, de citer une partie du nom de la fonction, par exemple:\newtab
).<name>() { ... }
syntaxe de la fonction rend<name>
soumis à alias d'extension, qui rompt la définition de la fonction (erreur d'analyse!) si un alias<name>
arrive à être défini. Généralement pas un sujet de préoccupation, puisque normalement invoquée scripts expansion d'alias est DÉSACTIVÉE par défaut. Cependant, dans les scripts d'origine à partir d'un shell INTERACTIF - comme dans le profil / fichiers d'initialisation - alias extension EST activée. Correctif: l'Utilisation non-POSIXfunction <name> { ... }
syntaxe pour définir la fonction -<name>
est alors PAS soumis à l'expansion d'alias.if [ "${BASH_SOURCE}" == "${0}" ]
avec une instruction de cas, de sorte qu'il peut être appelé comme un script (par exemple,newtab.sh
,newwin.sh
): gist.github.com/westurner/01b6be85e5a51fda22a6Voici comment cela se fait par le bash_it:
Après l'ajout de cette de votre .bash_profile, vous pouvez utiliser le
tab
de commande pour ouvrir le répertoire de travail en cours dans un nouvel onglet.Voir:
https://github.com/revans/bash-it/blob/master/plugins/available/osx.plugin.bash#L3
Cela ouvre un nouveau terminal et exécute la commande "echo bonjour" à l'intérieur.
do script ""
avec une chaîne vide pour créer un nouveau terminal, sans émission d'une commande.Si vous utilisez oh-my-zsh (où chaque tendance geek utiliser), après l'activation de la "osx" plugin dans
.zshrc
, il suffit d'entrer letab
de commande; il va ouvrir un nouvel onglet etcd
dans le répertoire de votre été sur.J'ai ajoutés à mon .bash_profile pour que je puisse avoir accès à tabname et newtab
Ainsi, lorsque vous êtes sur un onglet, vous pouvez simplement taper
à organiser tous les onglets ouverts que vous avez. C'est beaucoup mieux que d'obtenir des infos sur la languette et
changement de là.
Le raccourci clavier
cmd-t
ouvre un nouvel onglet, de sorte que vous pouvez passer cette touche pour OSA commande comme suit:osascript -e 'tell application "System Events"' -e 'keystroke "t" using command down' -e 'end tell'
lorsque vous êtes dans une fenêtre de terminal,
commande + n => ouvre un nouveau terminal et
commande + t => ouvre un nouvel onglet dans le courant de la fenêtre du terminal
Si vous utilisez iTerm cette commande va ouvrir un nouvel onglet:
À propos de cet extrait de simple, basé sur un script de commande (echo):
Avec X installé (par exemple, à partir de homebrew, ou Quartz), un simple "xterm &" ne (presque) le tour, il ouvre une nouvelle fenêtre de terminal (pas un onglet, tout de même).
et vous pouvez passer le répertoire cible comme paramètre