J'ai essayé de comprendre comment exécuter une commande bash dans une nouvelle fenêtre Max OS X Terminal.app. À titre d'exemple, voici comment j'exécuterais ma commande dans un nouveau processus bash:
bash -c "my command here"
Mais cela réutilise la fenêtre de terminal existante au lieu d'en créer une nouvelle. Je veux quelque chose comme:
Terminal.app -c "my command here"
Mais bien sûr, cela ne fonctionne pas. Je connais la commande "open -a Terminal.app", mais je ne vois pas comment transmettre des arguments au terminal, ni même si j'ai fait quels arguments utiliser.
Réponses:
une façon dont je peux penser à le faire par le haut de ma tête est de créer un fichier .command et de l'exécuter comme ceci:
ou utilisez applescript:
bien que vous deviez soit échapper à un grand nombre de guillemets doubles, soit ne pas pouvoir utiliser de guillemets simples
la source
osascript -e "tell application \"Terminal\" to do script \"echo '$variable'\"'
; exit
à la fin des commandes de script shell, commedo script "echo hello; exit"
. Vous devez toujours fermer la fenêtre séparément.Solution partielle:
Mettez les choses que vous voulez faire dans un script shell, comme ceci
Et n'oubliez pas de '
chmod +x file
' le rendre exécutable. Ensuite vous pouvezet il fonctionnera dans une nouvelle fenêtre. Ajoutez '
bash
' à la fin du script pour empêcher la nouvelle session de se terminer. (Bien que vous deviez peut-être trouver comment charger les fichiers rc des utilisateurs et d'autres choses ..)la source
/Users/{username}
. Existe-t-il un moyen de conserver le dossier de contexte identique à la fenêtre du terminal parent qui l'a ouvert?J'essaye de faire ça depuis un moment. Voici un script qui passe au même répertoire de travail, exécute la commande et ferme la fenêtre du terminal.
la source
tab 1 of window id 7433
stdout dans le shell de lancement . Pour supprimer cela, placez-le>/dev/null
avant<<END
.Au cas où quelqu'un se soucierait, voici un équivalent pour iTerm:
la source
Voici encore une autre version (en utilisant également AppleScript):
voir: codesnippets.joyent.com/posts/show/1516
la source
J'ai fait une version fonctionnelle de la réponse d'Oscar, celle-ci copie également l'environnement et les modifications dans le répertoire approprié
Vous pouvez l'utiliser comme ceci:
ou
la source
TMP_FILE="tmp.command"
peut poser un problème si vous démarrez plusieurs processus simultanément. Je suggérerais de le remplacer parTMP_FILE=$(mktemp "/tmp/command.XXXXXX")
Voici mon script génial, il crée une nouvelle fenêtre de terminal si nécessaire et bascule vers le répertoire dans lequel se trouve Finder si Finder est au premier plan. Il possède toutes les machines dont vous avez besoin pour exécuter des commandes.
la source
Un collègue m'a demandé comment ouvrir BEAUCOUP de sessions ssh à la fois. J'ai utilisé la réponse de Cobbal pour écrire ce script:
En mettant à jour la liste des commandes (elles ne doivent pas nécessairement être des invocations ssh), vous obtiendrez une fenêtre ouverte supplémentaire pour chaque commande exécutée. Le
sleep 60
à la fin est là pour conserver les.command
fichiers pendant leur exécution. Sinon, le shell se termine trop rapidement, exécutant le trap pour supprimer le répertoire temporaire (créé par mktemp) avant que les sessions lancées aient l'occasion de lire les fichiers.la source
Vous pouvez également appeler la nouvelle fonction de commande de Terminal en appuyant sur la
Shift + ⌘ + N
combinaison de touches. La commande que vous mettez dans la boîte sera exécutée dans une nouvelle fenêtre de terminal.la source
J'appelle ce script trun. Je suggère de le mettre dans un répertoire dans votre chemin exécutable. Assurez-vous qu'il est exécutable comme ceci:
Ensuite, vous pouvez exécuter des commandes dans une nouvelle fenêtre en ajoutant simplement trun avant elles, comme ceci:
Voici le script. Il fait des choses fantaisistes comme passer vos arguments, changer la barre de titre, effacer l'écran pour supprimer l'encombrement du démarrage du shell, supprimer son fichier une fois terminé. En utilisant un fichier unique pour chaque nouvelle fenêtre, il peut être utilisé pour créer plusieurs fenêtres en même temps.
la source
$*
tout au long de la ligne détruit toute citation non triviale dans l'entrée. Vous voulez à la"$@"
place.open -b com.apple.terminal
. Merci