Einfache Möglichkeit, ein Shell-Skript auszuführen


3

Ich möchte in Spotlight nach einem Shell-Skript (oder etwas, das ein Shell-Skript aufruft) suchen können und dass ein solches Shell-Skript ein Terminal-Fenster öffnet, damit die Ausgabe live angezeigt wird (und ich damit unterbrechen kann ctrl + C).

Im Moment habe ich eine backup.sh

#!/bin/bash
caffeinate -s \
  rsync -hva --progress --stats --delete "/path/to/source/" "/path/to/destination"

Das habe ich umbenannt, backup.commanddamit ich in Finder doppelklicken kann und es funktioniert einwandfrei. Ich kann jedoch nicht in Spolight danach suchen, da Spotlight nur nach Anwendungen, Systemeinstellungen und Kontakten suchen soll. Wenn ich Developer ankreuze, werden backup.commandjedoch auch viele unerwünschte Dateien angezeigt , die nur unnötig sind.

Was kann ich machen?

Ich habe versucht, es zu aktivieren , aber dann wird es im Hintergrund ausgeführt und es wird kein neues Terminalfenster geöffnet, sodass ich den Fortschritt nicht sehen kann und auch den Fortschritt nicht stoppen kann ctrl + C. Irgendein Vorschlag?


Möglicherweise ist dies möglich: Legen Sie ein Skript an, das ein Terminal öffnet, und führen Sie Ihr Skript in diesem Terminal aus.
Hirnwunde

Sie können Verzeichnisse mit unerwünschten Entwicklerdateien von der Anzeige in Spotlight ausschließen. Sie können dies in Spotlight -> Datenschutz tun (Sie können auch Ordner aus dem Finder ziehen).
Mateusz Szlosek

@hirnwunde Das wäre toll, aber ich weiß nicht wie.
Manuel

@MateuszSzlosek Ich möchte alles ausschließen .
Manuel

Gibt es einen guten Grund, warum Sie es nicht einfach anrufen backup, in das platzieren $PATHund es einfach von einem Terminal aus aufrufen können, indem Sie eingeben backupund die Eingabetaste drücken? Warum nicht einfach Time Machine verwenden? Es scheint viel einfacher zu sein als alles, was Sie durchgemacht haben, um dies zum Laufen zu bringen.
User3439894

Antworten:


6

Appitieren mit Platypus:

Laden Sie Platypus herunter und erstellen Sie eine App aus dem Shell-Skript.

Beispiel:

Bildbeschreibung hier eingeben

Mit den obigen Einstellungen wird eine App mit einem Fortschrittsbalken (einschließlich Details) erstellt und kann beendet werden. Der rsync-Vorgang muss jedoch manuell abgebrochen (abgebrochen) werden.

Bildbeschreibung hier eingeben

Die App selbst kann mit Spotlight gefunden werden.


Einfache AppleScript-Lösung:

In Mavericks (und wahrscheinlich später) müssen Sie der AppleScript-App erlauben, den Computer in "Systemeinstellungen -> Sicherheit und Datenschutz -> Datenschutz -> Barrierefreiheit" zu steuern.

Öffnen Sie ScriptEditor, geben Sie den folgenden Codeausschnitt ein und exportieren Sie ihn als Anwendung mit einem eindeutigen Namen:

tell application "Terminal"
    delay 2
    set newWindow to do script "caffeinate -s rsync -hva --progress --stats --delete /path/to/folder /path/to/folder2"
    activate
end tell

Wenn Sie root-Rechte benötigen, stellen Sie sudo -> "sudo caffeinate -s ...." voran.

Sie können die AppleScript-App verfeinern, indem Sie prüfen, ob in Terminal bereits Fenster geöffnet sind, und ein neues erstellen, um das Shell-Skript auszuführen:

set myScript to "caffeinate -s rsync -hva --progress --stats --delete /path/to/folder /path/to/folder2"
tell application "System Events"
    if exists (window 1 of process "Terminal") then
        tell application "Terminal"
            set newWindow to do script myScript
            activate
        end tell
    else
        tell application "Terminal"
            delay 2
            set Window1 to do script myScript
            activate
        end tell
    end if
end tell

Die AppleScript-App kann mit Spotlight gefunden werden.


In Mountain Lion müssen Sie "Systemeinstellungen -> Eingabehilfen -> Zugriff für unterstützendes Gerät aktivieren" aktivieren und ein wenig ändern, damit die AppleScript-App-Lösungen ordnungsgemäß ausgeführt werden:

set myScript to "caffeinate -s rsync -hva --progress --stats --delete /path/to/folder /path/to/folder2"
tell application "System Events"
    if exists (window 1 of process "Terminal") then
        tell application "Terminal"
            reopen
            activate
            set newWindow to do script myScript
        end tell
    else
        tell application "Terminal"
            reopen
            activate
            do script myScript in window 1
        end tell
    end if
end tell

AppleScript mit "externem" Shell-Skript (backup.sh):

Dies ist der letzte Ansatz, den das OP verwendet. Von hier genommen . In Mavericks (und wahrscheinlich später) müssen Sie der AppleScript-App erlauben, den Computer in "Systemeinstellungen -> Sicherheit & Datenschutz -> Datenschutz -> Barrierefreiheit" zu steuern. Man kann das ganze .sh(in der App platzierte Contents/Resources/backup.sh) laden mit:

set bashFile to path to resource "backup.sh"
tell application "Terminal"
    delay 1
    activate
    set newWindow to do script "bash " & quoted form of (POSIX path of bashFile)
end tell

Sie können die AppleScript-App verfeinern, indem Sie prüfen, ob in Terminal bereits Fenster geöffnet sind, und ein neues erstellen, um das Shell-Skript auszuführen:

set bashFile to path to resource "backup.sh"
tell application "System Events"
    if exists (window 1 of process "Terminal") then
        tell application "Terminal"
            delay 1
            set newWindow to do script "bash " & quoted form of (POSIX path of bashFile)
            activate
        end tell
    else
        tell application "Terminal"
            delay 2
            set Window1 to do script "bash " & quoted form of (POSIX path of bashFile)
            activate
        end tell
    end if
end tell

Keine einfache Möglichkeit, dies ohne zusätzliche App zu tun?
Manuel

1
@Manuel Mit deinen starren Spotlight-Einstellungen sehe ich keine andere Möglichkeit. Eine AppleScript-App ist die andere Möglichkeit.
klanomath

Die "starren Einstellungen" sind logisch, ich brauche nichts anderes und ich möchte meine Suchanfragen nicht als Spam versenden, nur weil ich in der Lage sein möchte, backup.shoder zu starten backup.command. Wie würde diese AppleScript-Lösung auf jeden Fall funktionieren?
Manuel

Ich fügte hinzu activate, um das Terminalfenster nach vorne zu bringen. Wenn das nicht in Ordnung ist, können Sie es natürlich löschen.
User3439894

@ klanomath Ich werde das AppleScript mit Hilfe dieser Frage testen und zurückkommen;)
Manuel

0

Führen Sie dann chmod 755 NameOfYourScriptvom Terminal aus./NameOfYourScript

Wenn Sie lses grün erscheinen


Ich möchte vermeiden, vom Terminal aus zu öffnen.
Manuel

@ Manuel es heißt ein Shell-Skript aus einem Grund, das wird auf jeden Fall der einfachste Weg sein
Didaktikos
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.