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

Ich verwende BBEdit, um Python-Skripte zu schreiben und zu testen, und führe die Skripte normalerweise in einem Terminalprozess mit dem Befehl „In Terminal ausführen“ aus. Gibt es eine Möglichkeit, den von BBEdit geöffneten Terminalprozess "aktiv" zu lassen, nachdem das Skript abgeschlossen ist? Das möchte ich nicht haben

[Process completed] 

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

$ python script_name.py

oder vom Python-Interpreter:

>>> script_name.py

Insbesondere im letzten Fall, wenn das Skript beendet wird, habe ich den Prozess immer noch im Terminalfenster aktiv.

Fügen Sie einfach ein & am Ende des Befehls hinzu, um ihn auszuführen.
Ich bin mir der Verwendung von & bewusst. Aber ich führe das Skript aus, während ich in BBEdit bin. BBEdit hat einen Menübefehl (siehe #! ("sebang") Menü), 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
Haben Sie den BareBones-Support unter support@barebones.com kontaktiert? Sie haben möglicherweise Methoden für Sie, um dies zu erreichen.

Antworten (5)

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

Python-Skript

Sie entscheiden sich, den Code mit der Option „Im Terminal ausführen“ von „#!“ zu testen. Speisekarte.

Im Terminal ausführen

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

Exit-Code

Jetzt ist hier der Übeltäter. BBEdit führt nicht nur Ihr Skript aus, sondern fügt auch eine 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 erstellen (aus dem Skriptmenü), das ausgeführt wird, aber ich persönlich denke, dass das Erstellen von Diensten am einfachsten ist (führen Sie ein AppleScript aus, das Ihr Skript im Terminal öffnet, wie Sie es manuell getan hätten).

In diesem Leckerbissen haben Sie ein Skript bereitgestellt , das tatsächlich das tut, was Sie wollen.

Hallo CousinCocaine, als du! Das scheint mir das Richtige zu sein! Lassen Sie mich das versuchen, und ich werde Ihnen das Kopfgeld gewähren. Da ich mit Apple-Skripten / -Diensten nicht vertraut bin, wäre es möglich, den Dienst mit einer Tastenkombination zu verknüpfen? Und falls es nicht möglich ist, wäre es kompliziert, dies in ein Skript umzuwandeln? (In diesem Fall erinnere ich mich wohl daran, dass es einfach ist, eine Verknüpfung mit einem Skript zu verknüpfen.)
Hallo CousinCocaine, ich habe mit Ihrem Code gespielt, teilweise nach den Anweisungen hier: arstechnica.com/gadgets/2011/03/… Aber ich kann ihn nicht im Dienstemenü 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: syntax error: Expected „, but found „““. (-2741) Die Datei /Users/fabio/Library/Application Support/BBEdit/Scripts/python existiert nicht. Ideen?

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 Verknüpfung mit einem Dienst zu verknüpfen).

Die zu befolgenden Schritte, damit dies funktioniert, sind wie folgt:

  1. Kopieren Sie den Skriptcode in die Script Editor.app (zu finden im Ordner /Applications/Utilities/)
  2. Kompilieren Sie das Skript (Hammer-Symbol in der Editor-Leiste)
  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 Einstellungen -> Menüs & Tastenkombinationen -> Skripte (Sie müssen rechts neben dem Namen des Skripts klicken, wo "keine" steht, und Ihre Tastenkombination drücken)

Hier ist ein Screenshot des Einstellungsbereichs

  1. Schließlich erstellen Sie ein Skript in BBEdit, z. B. ein Python-Skript, speichern es, und während es das Frontfenster in BBEdit ist, wählen Sie das AppleScript aus dem Skriptmenü von BBEdit aus. Dadurch wird das Python-Skript an das Terminal gesendet und das Skript wird ausgeführt.

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

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

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

Wenn die Linien

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

werden durch die Linien 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 im Skript als allererste Zeile vorhanden. Für ein Python-Skript sollte die Shebang-Zeile lauten:

#!/usr/bin/env python

während für ein Bash-Shell-Skript die Shebang-Zeile lauten sollte:

#!/bin/bash
Ich sehe, du hast es geschafft. Hübsch. BBEdit ein feines Stück Software. Viel Spaß beim Codieren.
$ 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 Anerkennung nehme

Ich bin mir der Verwendung von & bewusst. Aber ich führe das Skript aus, während ich in BBEdit bin. BBEdit hat einen Menübefehl (siehe #! ("sebang") Menü), 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
Könnten Sie stattdessen ein Shell-Skript aufrufen, das Ihre Python ausführt und in den Hintergrund stellt?
Aus BBEdit heraus? Vielleicht ja, aber wie macht man das?
Das OP hat eine spezielle Frage zum Ausführen von Skripts in BBEdit. Kein spezifischer Bash-Befehl. Ich denke, eine richtige Antwort auf eine andere Frage.

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

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

Anstatt also im Terminal zu laufen, haben Sie ein Terminalfenster geöffnet, in dem fswatch die Datei(en) auf Änderungen überwacht. Wenn es eines sieht, führt es das Skript aus – 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

Wählen Sie in den Terminal-Einstellungen unter Profile das Profil aus, das Sie standardmäßig verwenden, und wechseln Sie zur Registerkarte Shell. Wählen Sie unter "Beim Beenden der Shell" die Option "Schließen, wenn die Shell sauber beendet wurde".

Dadurch sollte das Fenster / die Registerkarte geschlossen werden, wenn das von Ihnen ausgeführte Skript sauber beendet wird.

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