Un modo semplice per eseguire lo script della shell

4

Voglio essere in grado di cercare in Spotlight uno script di shell (o qualcosa che chiama uno script di shell) e che tale script di shell apre una finestra di Terminale in modo che l'output sia mostrato dal vivo (e posso interrompere con ctrl + C ).

Al momento, ho un backup.sh

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

che ho rinominato in backup.command così posso fare doppio clic su Finder e funziona perfettamente. Ma non posso cercarlo in Spolight perché voglio che Spotlight cerchi solo applicazioni, preferenze di sistema e contatti, e se contrassegno lo sviluppatore, mostra backup.command ma anche molti file indesiderati che non sono necessari.

Che cosa posso fare?

Ho provato a appify ma poi viene eseguito sullo sfondo e non apre una nuova finestra Terminal in modo Non riesco a vedere i progressi di come sta andando, e inoltre non riesco a fermare il progresso con ctrl + C . Qualche suggerimento?

    
posta Manuel 03.02.2016 - 14:16
fonte

2 risposte

6

Applicazione con Platypus:

Scarica Platypus e crea un'app dallo script di shell.

Esempio:

Leimpostazioniprecedenticreanoun'appconunabarradiavanzamento(dettagliinclusi)epossonoessereabbandonate-ilprocessorsyncdeveesserecancellato(ucciso)manualmente.

L'appstessapuòesseretrovataconSpotlight.

SoluzioneAppleScriptsemplice:

InMavericks(eprobabilmentepiùtardi)deviconsentireall'appAppleScriptdicontrollareilcomputerin"Preferenze di sistema - > Sicurezza e privacy - > Privacy - > Accessibilità"

Apri ScriptEditor, inserisci lo snippet di codice qui sotto ed esportalo come applicazione con un nome univoco:

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

Se hai bisogno dei permessi di root antepida sudo - > "sudo caffeinate -s ...."

Puoi perfezionare l'app AppleScript verificando che Terminal abbia già finestre aperte e ne crei una nuova per eseguire lo script della shell:

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

L'app AppleScript può essere trovata con Spotlight.

In Mountain Lion devi abilitare "Preferenze di sistema - > Accessibilità - > Abilita accesso per dispositivo assistivo" e cambialo leggermente per far funzionare correttamente le soluzioni di app di AppleScript:

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 con script di shell "esterno" (backup.sh):

Questo è l'approccio finale che l'OP sta usando. Tratto da qui . In Mavericks (e probabilmente più tardi) devi consentire all'applicazione AppleScript di controllare il computer in "Preferenze di sistema - > Sicurezza e privacy - > Privacy - > Accessibilità". Si può caricare l'intero .sh (inserito nell'app in Contents/Resources/backup.sh ) con:

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

Puoi perfezionare l'app AppleScript verificando che Terminal abbia già finestre aperte e ne crei una nuova per eseguire lo script della shell:

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
    
risposta data 03.02.2016 - 14:44
fonte
0

Esegui chmod 755 NameOfYourScript dal terminale, quindi ./NameOfYourScript

Se ls apparirà in verde

    
risposta data 04.02.2016 - 10:38
fonte

Leggi altre domande sui tag