Vermeiden Sie das Schließen des Terminalprozesses, nachdem BBEdit ein Skript ausgeführt hat

5

Ich verwende BBEdit zum Schreiben und Testen von Python-Skripten und führe die Skripten normalerweise in einem Terminalprozess mit dem Befehl "In Terminal ausführen" aus. Gibt es eine Möglichkeit, den von BBEdit geöffneten Terminalprozess nach Abschluss des Skripts "aktiv" zu lassen? Ich möchte das nicht haben

[Process completed] 

message und stattdessen immer noch eine aktive Eingabeaufforderung zu haben, entweder die Shell oder die Python-Umgebung, wobei alle Variablen, die ich im Skript erstellt habe, noch vorhanden sind. Dies ähnelt der Situation, wenn ich das Skript von einem vorhandenen Terminalprozess aus starte, entweder von der Shell aus:

$ python script_name.py

oder vom Python-Interpreter:

>>> script_name.py

Insbesondere im letzten Fall, wenn das Skript beendet wird, ist der Prozess im Terminalfenster noch aktiv.

Fabio
quelle
1
Fügen Sie einfach ein & am Ende des Befehls hinzu, um es auszuführen.
vom
Mir ist die Verwendung von & bekannt. Aber ich führe das Skript aus, während ich in BBEdit bin. BBEdit hat einen Menübefehl (siehe #! ("Sebang") menu), der das aktuelle Skript an das Terminal "sendet" und es ausführt. Damit diese Antwort nützlich ist, muss ich wissen, wie man das Verhalten dieses BBEdit-Menübefehls ändert, und am Ende des Befehls ein Standard "&" hinzufügen
Fabio
1
Haben Sie den BareBones-Support unter [email protected] kontaktiert? Möglicherweise haben sie Methoden, mit denen Sie dies erreichen können.
Scot

Antworten:

5

Soweit ich weiß, haben Sie ein Python-Skript in BBEdit.

Python-Skript

Sie können den Code mit der Option "Im Terminal ausführen" aus dem Feld "#!" Testen. Speisekarte.

Führen Sie im Terminal

Nun öffnet sich ein Terminalfenster, führt das Skript aus und beendet sich.

Exit-Code

Jetzt ist hier der Täter. BBEdit führt nicht nur Ihr Skript aus, sondern fügt auch ein exit. Es gibt keine Option in BBEdit, um diesen exitBefehl zu entfernen . Aber BBEdit ist in hohem Maße skriptfähig und es gibt einige Problemumgehungen. Sie können ein BBEdit-Skript (über das Menü "Skripte") erstellen, das ausgeführt wird. Ich persönlich halte das Erstellen von Diensten jedoch für das einfachste (führen Sie AppleScript aus, mit dem Sie Ihr Skript im Terminal wie manuell öffnen können).

In diesem Artikel haben Sie ein Skript bereitgestellt, das genau das tut, was Sie wollen.

CousinCocaine
quelle
1
Hallo CousinCocaine, als du! Das scheint das Richtige für mich zu sein! Lass es mich versuchen, und ich werde dir das Kopfgeld gewähren. Wäre es möglich, den Dienst einer Tastenkombination zuzuordnen, da ich mit Apple-Skripten / -Diensten nicht vertraut bin? Und falls es nicht möglich ist, wäre es schwierig, daraus ein Skript zu machen? (In diesem Fall denke ich daran, dass es einfach ist, eine Verknüpfung mit einem Skript zu verknüpfen)
Fabio
Hallo CousinCocaine, ich habe mit deinem Code gespielt und teilweise die Anweisungen hier befolgt : arstechnica.com/gadgets/2011/03/… Aber ich kann ihn nicht im Menü Dienste sehen, obwohl er in ~ / Library / Services gespeichert ist . Ich habe es auch als Skript gespeichert (Textdatei mit der Erweiterung .sh in ~ / Library / Application \ Support / BBEdit / Scripts /), aber es gibt mir den folgenden Fehler: 83:84: Syntaxfehler: Erwartet, aber gefunden "". (-2741) Die Datei / Users / Fabio / Bibliothek / Application Support / BBEdit / Scripts / Python ist nicht vorhanden. Ideen?
Fabio
3

Aufbauend auf der Antwort von CousinCocaine und auf dieser Antwort auf eine alte Frage, die ich selbst im BBEdit-Forum gepostet habe, bin ich zu diesem AppleScript gekommen, das spezifisch für Python ist:

-------------------------------------------------------------------------------------------
# Auth: Christopher Stone
# modif Fabio Grazioso
# dCre: 2015/09/22 11:00
# dMod: 2017/10/03 18:40 
# Appl: BBEdit, Terminal
# Task: Attempt to run the front text document in Terminal.app.
# Libs: None
# Osax: None
# Tags: @Applescript, @Script, @BBEdit, @Run, @Front, @Document, @Terminal, @Python
-------------------------------------------------------------------------------------------

tell application "BBEdit"
    tell front text document
        if on disk = false then error "Front document is not saved!"
        if modified = true then save
        if contents of line 1 does not start with "#!" then error "No valid shebang line found!"
        set docName to its name
        set docFile to POSIX path of (get its file)
    end tell
end tell

set shCMD to text 2 thru -1 of "
FILE=" & docFile & ";
if [[ ! -x \"$FILE\" ]]; then
  chmod +x \"$FILE\";
fi
"
do shell script shCMD

set {oldTIDS, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/"}
set docName to quoted form of docName
set docParentPath to quoted form of ((text items 1 thru -2 of docFile) as text)
set AppleScript's text item delimiters to oldTIDS

tell application "Terminal"
    activate
    if name of windows = {missing value} then do script
    if processes of front window = {} then do script


    tell front window
        if its busy = true then
            do script "cd " & docParentPath & " && python -i " & docName
        else
            do script "cd " & docParentPath & " && python -i " & docName in selected tab
        end if
    end tell
end tell

-------------------------------------------------------------------------------------------

Ich finde diese Antwort besser als die von CousinCocaine vorgeschlagene, nur weil ich eine Tastenkombination für das Skript erstellen kann (AFAIK es ist nicht möglich, eine Tastenkombination mit einem Dienst zu verknüpfen).

Folgende Schritte müssen ausgeführt werden, damit dies funktioniert:

  1. Kopieren Sie den Skriptcode in die Datei "Script Editor.app" (im Ordner "/ Applications / Utilities /").
  2. Kompilieren Sie das Skript (Hammersymbol in der Editorleiste)
  3. Speichern Sie es im BBEdit-Skriptordner: / Users // Library / Application \ Support / BBEdit / Scripts /
  4. Optional Verknüpfen Sie das Skript in BBEdit mit einer Tastenkombination in den Voreinstellungen -> Menüs und Verknüpfungen -> Skripten (Sie müssen rechts neben dem Namen des Skripts auf "Keine" klicken und die Verknüpfung drücken).

Hier ist ein Screenshot des Einstellungsbereichs

  1. Schließlich erstellen Sie ein Skript in BBEdit, z. B. ein Python-Skript, und speichern es. Während es sich in BBEdit um das vordere Fenster handelt, wählen Sie das AppleScript aus dem Menü "Skripte" von BBEdit aus. Dadurch wird das Python-Skript an das Terminal gesendet und das Skript ausgeführt.

Beachten Sie beim AppleSript, dass die Option "-i" im Python-Aufruf in der Zeile steht

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

bewirkt, dass nach der Ausführung des Python-Skripts der Python-Interpreter gemäß der Anfrage in der Frage nicht beendet wird.

Wenn die Zeilen

do script "cd " & docParentPath & " && python -i " & docName
do script "cd " & docParentPath & " && python -i " & docName in selected tab

werden durch die Zeilen ersetzt

do script "cd " & docParentPath & " && ./" & docName
do script "cd " & docParentPath & " && ./" & docName in selected tab

dann kann dieses AppleScript jedes Skript starten, vorausgesetzt, die richtige "shebang" -Zeile ist in dem Skript als allererste Zeile vorhanden. Für ein Python-Skript sollte die Shebang-Zeile wie folgt lauten:

#!/usr/bin/env python

Für ein Bash-Shell-Skript sollte die Shebang-Zeile wie folgt lauten:

#!/bin/bash
Fabio
quelle
1
Ich sehe, du hast es geschafft. Nett. BBEdit ein schönes Stück Software. Fröhliches Codieren.
CousinCocaine
2
$ python script_name.py &

Dadurch wird der Prozess im Hintergrund ausgeführt.

Alternativ könnten Sie die Antworten hier versuchen , für die ich nicht die Gutschrift nehme

aufgegeben
quelle
Mir ist die Verwendung von & bekannt. Aber ich führe das Skript aus, während ich in BBEdit bin. BBEdit hat einen Menübefehl (siehe #! ("Sebang") menu), der das aktuelle Skript an das Terminal "sendet" und es ausführt. Damit diese Antwort nützlich ist, müsste ich wissen, wie man das Verhalten dieses BBEdit-Menübefehls ändert, und am Ende des Befehls ein Standard "&" hinzufügen
Fabio
Könnten Sie stattdessen ein Shell-Skript aufrufen, das Ihre Pythons und Hintergründe ausführt?
vom
Aus BBEdit heraus? Vielleicht ja, aber wie machst du das?
Fabio
1
Das OP hat eine spezielle Frage zum Ausführen von Skripten in BBEdit. Kein bestimmter Bash-Befehl. Ich denke eine richtige Antwort auf eine andere Frage.
CousinCocaine
2

Dies ist nicht ganz das, was Sie wollen, aber es ist eine vernünftige Umgehung:

FSWatch. Kurz, es überwacht ein Verzeichnis oder eine Datei auf Änderungen und führt ein Skript aus, wenn es eine Änderung sieht.

Anstatt im Terminal zu laufen, haben Sie ein Terminalfenster geöffnet, in dem fswatch die Datei (en) auf Änderungen überwacht. Wenn es eines sieht, wird das Skript ausgeführt - in diesem Fall die überwachte Datei.

Dies hat den Vorteil, dass es jedes Mal im selben Fenster ausgeführt wird, sodass Sie nicht ständig neue Terminalfenster öffnen.

Anfahrt hier:

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

Sherwood Botsford
quelle
0

Wählen Sie in den Terminaleinstellungen unter "Profile" das Profil aus, das Sie standardmäßig verwenden, und wechseln Sie zur Registerkarte "Shell". Wählen Sie unter "Wenn die Shell beendet wird" die Option "Schließen, wenn die Shell ordnungsgemäß beendet wurde".

Dadurch sollte das Fenster / die Registerkarte geschlossen werden, wenn das Skript, das Sie ausführen, ordnungsgemäß beendet wird.

Scott Earle
quelle
Danke für die Information. Dies ist jedoch völlig anders als das, was ich brauche. Ich brauche das Terminal offen und aktiv :)
Fabio