Lancer un script dans une nouvelle fenêtre Ghostty
Ouvrir Ghostty dans un répertoire de projet précis, exécuter un script de configuration (sourcer des variables d'environnement, démarrer un conteneur, charger des accès), puis basculer dans un shell interactif lorsque le script se termine.
Le piège
L'approche intuitive open -na Ghostty --args -e /bin/bash -c "./scripts/setup-env.sh; exec $SHELL -i" semble correcte, mais elle échoue de deux façons :
- Deux onglets s'ouvrent au lieu d'un. Le drapeau
-ede Ghostty ne consomme qu'un seul jeton après lui comme exécutable. Tout ce qui suit (-c, le chemin du script, la ligne de shell) est interprété comme des drapeaux Ghostty distincts, et-cprovoque l'ouverture d'un second onglet. command not foundpour les outils Homebrew. Passer à--command=règle le problème des onglets, mais Ghostty encapsule la valeur dansbash --noprofile --norc. Vos fichiers.zprofileet.zshrcne sont jamais chargés, donc/opt/homebrew/binest absent duPATHet tout ce qui est installé via Homebrew devient introuvable.
Configuration qui fonctionne
{
"label": "Ouvrir un shell projet (prod)",
"type": "command",
"command": "open",
"args": [
"-na", "Ghostty",
"--args",
"--working-directory=/Users/vous/Code/votre-projet",
"--command=zsh -lc './scripts/setup-env.sh prod; exec zsh -i'"
]
}
Collez cette action dans n'importe quel service, groupe ou raccourci. Remplacez ces trois valeurs par les vôtres :
--working-directory=…: chemin absolu vers le projet où le shell doit s'ouvrir../scripts/setup-env.sh: chemin (relatif au répertoire de travail) du script à exécuter.prod: les arguments attendus par votre script. Retirez-les si vous n'en avez pas.
Pourquoi ça fonctionne
open -na Ghosttydémarre une nouvelle instance de Ghostty et transmet tout ce qui suit--args. Le démarrage direct depuis la ligne de commande n'est pas pris en charge sur macOS, donc passer paropenest obligatoire.--working-directory=indique à Ghostty lecwdde la nouvelle fenêtre.--command=prend toute la ligne de shell comme une seule valeur, ce qui empêche Ghostty de la mal interpréter et d'ouvrir un second onglet.- La valeur
zsh -lc '...'démarre un shell de connexion (login shell). Le-ldéclenche le chargement de vos fichiers d'initialisation (.zprofile,.zshrc), donc lePATHinclut/opt/homebrew/binet le script peut appeler tout ce que vous utiliseriez normalement dans un terminal. exec zsh -ià la fin remplace le processus du script par un shell interactif, ce qui garde la fenêtre ouverte après la configuration.
Prérequis
- Ghostty installé (testé avec la version 1.3.x)
zshcomme shell par défaut (le cas sur macOS 10.15 et plus)- Les binaires appelés par votre script (par exemple
aws,docker) doivent se retrouver sur lePATHune fois que.zprofileou.zshrcest chargé. S'ils fonctionnent dans un terminal normal, ils fonctionneront ici aussi.