Einfache Möglichkeit, Shell-Skript auszuführen

Ich möchte in der Lage sein, in Spotlight nach einem Shell-Skript (oder etwas, das ein Shell-Skript aufruft) zu suchen, und dass ein solches Shell-Skript ein Terminalfenster öffnet, sodass die Ausgabe live angezeigt wird (und ich kann mit unterbrechen) ctrl + C.

Im Moment habe ich einebackup.sh

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

die ich umbenannt habe, backup.commanddamit ich im Finder doppelklicken kann und es funktioniert perfekt. Aber ich kann in Spolight nicht danach suchen, weil ich möchte, dass Spotlight nur nach Anwendungen, Systemeinstellungen und Kontakten sucht, und wenn ich Developer markiere, zeigt es aber auch viele backup.commandunerwünschte Dateien, die einfach unnötig sind.

Was kann ich machen?

Ich habe versucht, es zu appify, aber dann läuft es im Hintergrund und öffnet kein neues Terminalfenster, sodass ich den Fortschritt nicht sehen kann, wie es läuft, und ich kann den Fortschritt auch nicht mit stoppen ctrl + C. Irgendein Vorschlag?

Vielleicht ist dies möglich: appify ein Skript, das ein Terminal öffnet, und führe dein Skript in diesem Terminal aus.
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 dort auch Ordner aus dem Finder ziehen).
@hirnwunde Das wäre toll, aber ich weiß nicht wie.
@MateuszSzlosek Ich möchte alles ausschließen .
Gibt es einen guten Grund, warum Sie es nicht einfach anrufen können backup, platzieren Sie es in $PATHund rufen Sie es einfach von einem Terminal aus an, indem Sie es eingeben backupund die Eingabetaste drücken? Warum nicht einfach Time Machine verwenden, es scheint viel einfacher zu sein als alles, was Sie bisher durchgemacht haben, um dies zum Laufen zu bringen.
@ user3439894 Es ist mir egal, wo ich es ablegen oder welchen Namen ich verwenden soll, aber was ich vermeiden möchte, ist das Öffnen des Terminals, um das Skript aufzurufen. Außerdem brauche ich Time Machine nicht, da dies ein Skript ist, um den Inhalt eines USB-Sticks auf einen anderen USB-Stick zu duplizieren (tatsächlich möchte ich Time Machine nicht, außerdem denke ich, dass es dafür nicht funktioniert).
Ja, Time Machine würde daran nicht funktionieren, und ich dachte, Sie würden von intern nach extern sichern, nicht von extern nach extern, sorry. Wie auch immer, Sie möchten es also nicht vom Terminal aus aufrufen und es dann auf dem Dock oder dem Desktop platzieren, dann müssen Sie Spotlight nicht verwenden. Obwohl ich weiß, dass Sie sagen müssen, dass Sie es nicht im Dock oder auf dem Desktop platzieren möchten, also ohne die Entwicklung in Spotlight zu aktivieren, ist die Antwort von klanomath wahrscheinlich die beste Lösung, um Spotlight zu verwenden, ohne die Entwicklung in Spotlight zu aktivieren.
Siehe dies vom Superuser: superuser.com/questions/221964/…

Antworten (2)

Applizieren mit Platypus:

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

Beispiel:

Geben Sie hier die Bildbeschreibung ein

Die obigen Einstellungen erstellen eine App mit einem Fortschrittsbalken (einschließlich Details) und können beendet werden - der rsync-Prozess muss jedoch manuell abgebrochen (gekillt) werden.

Geben Sie hier die Bildbeschreibung ein

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 & Datenschutz -> Datenschutz -> Eingabehilfen" zu steuern.

Öffnen Sie den ScriptEditor, geben Sie das folgende Code-Snippet ein und exportieren Sie es 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-Berechtigungen benötigen, stellen Sie sudo voran -> "sudo caffeinate -s ...."

Sie können die AppleScript-App verfeinern, indem Sie überprüfen, ob Terminal bereits geöffnete Fenster hat, 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 Hilfsgeräte 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 -> Eingabehilfen" zu steuern. .shMan kann das vollständige (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 überprüfen, ob Terminal bereits geöffnete Fenster hat, 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 eine zusätzliche App zu tun?
@Manuel Mit deinen starren Spotlight-Einstellungen sehe ich keine andere Möglichkeit. Eine AppleScript-App ist die andere Möglichkeit.
Die „starren Einstellungen“ sind logisch, ich brauche nichts anderes und ich möchte meine Suchen nicht spammen, 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?
Ich habe hinzugefügt activate, um das Terminalfenster nach vorne zu bringen. Wenn das nicht in Ordnung ist, dann kannst du es natürlich löschen.
@klanomath Ich werde das AppleScript mit Hilfe dieser Frage ausprobieren und zurückkommen;)
@klanomath Das Skript hat mir gegeben error -25211, als Terminal geöffnet war, aber ich habe es mit Hilfe dieser Frage gelöst . In jedem Fall werden, wenn Terminal nicht läuft, zwei Fenster geöffnet, wenn das Skript ausgeführt wird. Ich leite Mountain Lion.
@Manuel Hmm, bei mir funktioniert es nicht, aber Sie können es selbst bearbeiten: Bitte fügen Sie einen Zusatz hinzu wie: Ersetzen Sie in Mountain Lion die Zeilen xyz des Skripts durch den Inhalt blublublu durch blablabla

chmod 755 NameOfYourScriptDann vom Terminal ausführen./NameOfYourScript

Wenn Sie lses grün erscheinen

Ich möchte vermeiden, vom Terminal aus zu öffnen.
@Manuel wird aus einem bestimmten Grund als Shell-Skript bezeichnet, das ist definitiv der einfachste Weg
Ich denke, es wird Shell-Skript genannt, weil es in der Shell geschrieben ist. Manchmal möchten Sie Dinge von der Shell aus ausführen, manchmal möchten Sie sie von der GUI aus ausführen.