Question:
Évitez de fermer le processus de terminal après que BBEdit ait exécuté un script
Fabio
2017-08-18 07:15:03 UTC
view on stackexchange narkive permalink

J'utilise BBEdit pour écrire et tester des scripts Python, et j'exécute généralement les scripts dans un processus terminal, avec la commande "Exécuter dans le terminal". Existe-t-il un moyen pour que le processus de terminal ouvert par BBEdit reste "actif", une fois le script terminé? Je voudrais ne pas avoir le

  [Processus terminé]
 

et à la place d'avoir toujours une invite active, soit le shell ou l'environnement Python, avec toutes les variables que j'ai créées dans le script toujours existantes. Ce serait similaire à la situation lorsque je lance le script à partir d'un processus terminal existant, soit à partir du shell:

  $ python nom_script.py
 

ou depuis l'interpréteur python:

  >>> nom_script.py
 

En particulier, dans le dernier cas, lorsque le script se termine, j'ai toujours le processus actif dans la fenêtre du terminal.

Ajoutez simplement un & à la fin de la commande pour l'exécuter.
Je connais l'utilisation de &. Mais j'exécute le script pendant que je suis dans BBEdit. BBEdit a une commande de menu (voir #! (Menu "sebang")) qui "envoie" le script courant au terminal et l'exécute. Pour que cette réponse soit utile, j'aurais besoin de savoir comment modifier le comportement de cette commande de menu BBEdit, et ajouter un "&" par défaut à la fin de la commande
Avez-vous contacté le support BareBones sur support@barebones.com?Ils peuvent avoir une méthode pour vous permettre d'accomplir cela.
Cinq réponses:
CousinCocaine
2017-10-01 11:44:30 UTC
view on stackexchange narkive permalink

Si je comprends bien, vous avez un script Python dans BBEdit.

Python script

Vous choisissez de tester le code à l'aide de l'option "Exécuter dans le terminal" dans le menu '#!'menu.

Run in Terminal

Une fenêtre de terminal s'ouvre, exécute le script et se ferme.

exit code

Voici maintenant le coupable.BBEdit n'exécute pas seulement votre script, mais ajoute également une sortie .Il n'y a pas d'option dans BBEdit pour supprimer cette commande exit .Mais BBEdit est hautement scriptable et il existe quelques solutions de contournement.Vous pouvez créer un script BBEdit (à partir du menu Scripts) qui s'exécute, mais personnellement, je pense que la création du service est la plus simple (exécutez un certain AppleScript qui ouvre votre script dans le terminal comme vous l'auriez fait manuellement).

Dans cette friandise, vous avez fourni un script qui fait réellement ce que vous voulez.

Salut CousinCocaine, que toi!Cela me semble la bonne chose! Laissez-moi essayer ceci, et je vous accorderai la prime. Comme je ne suis pas familier avec les scripts / services Apple, serait-il possible d'associer le service à un raccourci clavier?Et dans le cas où ce n'est pas possible, serait-il compliqué d'en faire un script?(Dans ce cas, je suppose que je me souviens qu'il est facile d'associer un raccourci à un script)
Salut CousinCocaine, j'ai joué avec votre code, en suivant partiellement les instructions trouvées ici: https://arstechnica.com/gadgets/2011/03/howto-build-mac-os-x-services-with-automator-and-shell-scripting/ Mais je ne peux pas le voir dans le menu des services, bien qu'il soit enregistré dans ~ / Library / Services. Je l'ai également sauvegardé dans un script (fichier texte, avec l'extension .sh, dans ~ / Library / Application \ Support / BBEdit / Scripts /) mais cela me donne l'erreur suivante: 83:84: erreur de syntaxe: «» attendu, mais trouvé «» ». (-2741) Le fichier / Users / fabio / Library / Application Support / BBEdit / Scripts / python n'existe pas. Des idées?
Fabio
2017-10-04 18:00:52 UTC
view on stackexchange narkive permalink

En me basant sur la réponse de CousinCocaine, et sur cette réponse à une vieille question que je me suis posée moi-même sur le forum BBEdit, je suis arrivé à ce AppleScript, qui est pour Python:

  -------------------------------------------- -----------------------------------------------
# Auth: Christopher Stone
# modif Fabio Grazioso
# dCre: 22/09/2015 11:00
# dMod: 03/10/2017 18:40
# Appl: BBEdit, Terminal
# Tâche: tentative d'exécuter le document texte avant dans Terminal.app.
# Libs: Aucun
# Osax: Aucun
# Balises: @Applescript, @Script, @BBEdit, @Run, @Front, @Document, @Terminal, @Python
-------------------------------------------------- -----------------------------------------

dire à l'application "BBEdit"
    dire le document texte avant
        si sur le disque = false alors l'erreur "Le document avant n'est pas enregistré!"
        si modifié = vrai alors enregistrez
        si le contenu de la ligne 1 ne commence pas par "#!" puis erreur "Aucune ligne shebang valide trouvée!"
        définir docName sur son nom
        définir docFile sur le chemin POSIX de (obtenir son fichier)
    fin dire
fin dire

définir shCMD sur le texte 2 à -1 de "
FILE = "& docFile &";
si [[ ! -x \ "$ FILE \"]]; puis
  chmod + x \ "$ FICHIER \";
Fi
"
faire un script shell shCMD

définir {oldTIDS, les délimiteurs d'élément de texte d'AppleScript} sur {les délimiteurs d'élément de texte d'AppleScript, "/"}
définir docName sur la forme citée de docName
définir docParentPath à la forme citée de ((éléments de texte 1 à -2 de docFile) en tant que texte)
définir les délimiteurs d'éléments de texte d'AppleScript sur oldTIDS

dire à l'application "Terminal"
    Activer
    si le nom de la fenêtre = {valeur manquante} alors faites le script
    si les processus de la fenêtre avant = {} alors faire un script


    dire la fenêtre avant
        si c'est occupé = vrai alors
            faire script "cd" & docParentPath & "&& python -i" & docName
        autre
            faire le script "cd" & docParentPath & "&& python -i" & docName dans l'onglet sélectionné
        fin si
    fin dire
fin dire
-------------------------------------------------- -----------------------------------------
 

Je trouve cette réponse meilleure que celle proposée par CousinCocaine simplement parce que je peux créer un raccourci clavier vers le script (AFAIK il n'est pas possible d'associer un raccourci à un service).

Les étapes à suivre pour que cela fonctionne sont les suivantes:

  1. Copiez le code du script dans Script Editor.app (qui se trouve dans le dossier / Applications / Utilities /)
  2. Compilez le script (icône marteau dans la barre de l'éditeur)
  3. Enregistrez-le dans le dossier des scripts BBEdit: / Users // Library / Application \ Support / BBEdit / Scripts /
  4. Facultatif Dans BBEdit associez le script à un raccourci clavier, dans les Préférences -> Menus & Raccourcis -> Scripts (vous devez cliquer à droite du nom du script, où il est dit "aucun ", et appuyez sur votre raccourci)

Here is a screenshot of the preferences' pane

  1. Enfin, vous créez un script dans BBEdit, par exemple un script python, vous l'enregistrez et, alors qu'il s'agit de la fenêtre principale de BBEdit, vous sélectionnez le script AppleScript dans le menu Scripts de BBEdit. Cela enverra le script python au terminal et le script sera exécuté.

À propos d'AppleSript, notez que l'option "-i" dans l'appel python dans la ligne

  do script "cd" & docParentPath & "&& python -i" & docName
 

fait en sorte qu'après l'exécution du script python, l'interpréteur python ne soit pas quitté, comme indiqué dans la requête de la question.

Si les lignes

  do script "cd" & docParentPath & "&& python -i" & docName
faire le script "cd" & docParentPath & "&& python -i" & docName dans l'onglet sélectionné
 

sont remplacés par les lignes

  faire script "cd" & docParentPath & "&& ./" & docName
faire le script "cd" & docParentPath & "&& ./" & docName dans l'onglet sélectionné
 

alors cet AppleScript peut lancer n'importe quel script, à condition que la bonne ligne "shebang" soit présente dans le script, comme toute première ligne. Pour un script python, la ligne shebang doit être:

  #! / usr / bin / env python
 

alors que pour un script shell bash, la ligne shebang doit être:

  #! / bin / bash
 
Je vois que tu l'as fait.Agréable.BBEdit un excellent logiciel.Bon codage.
bated
2017-09-29 07:55:31 UTC
view on stackexchange narkive permalink
  $ python nom_script.py &
 

Cela lancera le processus en arrière-plan.

Vous pouvez également essayer les réponses ici pour lesquelles je ne suis pas crédité

Je connais l'utilisation de &. Mais j'exécute le script pendant que je suis dans BBEdit. BBEdit a une commande de menu (voir #! (Menu "sebang")) qui "envoie" le script courant au terminal et l'exécute. Pour que cette réponse soit utile, j'aurais besoin de savoir comment modifier le comportement de cette commande de menu BBEdit, et ajouter un "&" par défaut à la fin de la commande
Pourriez-vous appeler un script shell à la place qui exécute votre python et le met en arrière-plan?
Depuis BBEdit?Peut-être que oui, mais comment faites-vous cela?
L'OP a une question spécifique sur l'exécution du script à partir de BBEdit.Pas une commande Bash spécifique.Je pense qu'une réponse correcte à une autre question.
Sherwood Botsford
2017-10-03 03:38:48 UTC
view on stackexchange narkive permalink

Ce n'est pas tout à fait ce que vous voulez, mais c'est une solution de contournement raisonnable:

FSWatch.En bref, il surveille un répertoire ou un fichier pour les changements, et exécute un script chaque fois qu'il voit un changement.

Donc, au lieu de fonctionner dans le terminal, vous avez une fenêtre de terminal ouverte avec fswatch qui surveille le (s) fichier (s) pour les changements.Lorsqu'il en voit un, il exécute le script - dans ce cas, le fichier surveillé.

Cela a l'avantage de s'exécuter dans la même fenêtre à chaque fois, de sorte que vous n'ouvrez pas de nouvelles fenêtres de terminal tout le temps.

Itinéraire ici:

https://stackoverflow.com/questions/24573584/how-to-watch-file-changes-on-mac-osx-using-fswatch

Scott Earle
2017-09-29 08:36:06 UTC
view on stackexchange narkive permalink

Dans les préférences du terminal sous Profils, sélectionnez le profil que vous utilisez par défaut et accédez à l'onglet Shell.Sous "Quand le shell se ferme", sélectionnez "Fermer si le shell s'est terminé proprement".

Cela devrait fermer la fenêtre / l'onglet lorsque le script que vous exécutez se termine proprement.

Merci pour l'information.Cependant, c'est complètement différent de ce dont j'ai besoin.J'ai besoin du terminal ouvert et actif :)


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...