Una forma fácil de ejecutar el script de shell

4

Quiero poder buscar en Spotlight un script de shell (o algo que llame a un script de shell) y que dicho script de shell abra una ventana de Terminal para que la salida se muestre en vivo (y puedo interrumpir con ctrl + C ).

En este momento, tengo un backup.sh

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

he cambiado el nombre a backup.command para que pueda hacer doble clic en el Finder y funciona perfectamente. Pero no puedo buscarlo en Spolight porque quiero que Spotlight solo busque Aplicaciones, Preferencias del Sistema y Contactos, y si marca Desarrollador, entonces muestra backup.command pero también muchos archivos no deseados que son simplemente innecesarios.

¿Qué puedo hacer?

Intenté appify pero se ejecuta en segundo plano, y no abre una nueva ventana de Terminal, por lo que No puedo ver el progreso de cómo va, y tampoco puedo detener el progreso con ctrl + C . ¿Alguna sugerencia?

    
pregunta Manuel 03.02.2016 - 14:16

2 respuestas

6

Aplicando con Platypus:

Descargue Platypus y cree una aplicación desde el script de shell.

Ejemplo:

Laconfiguraciónanteriorcreaunaaplicaciónconunabarradeprogreso(incluidoslosdetalles)ysepuedecerrar,aunqueelprocesorsyncdebecancelarse(eliminarse)manualmente.

LapropiaaplicaciónsepuedeencontrarconSpotlight.

SoluciónsimpledeAppleScript:

EnMavericks(yprobablementemásadelante)debespermitirquelaaplicaciónAppleScriptcontrolelacomputadoraen"Preferencias del sistema - > Seguridad y privacidad - > Privacidad - > Accesibilidad"

Abra ScriptEditor, ingrese el fragmento de código a continuación y expórtelo como una aplicación con un nombre único:

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

Si necesita permisos de root, haga clic en el prefijo sudo - > "sudo cafeinate -s ...."

Puedes refinar la aplicación AppleScript verificando si Terminal ya tiene ventanas abiertas y crear una nueva para ejecutar el script de 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

La aplicación AppleScript se puede encontrar con Spotlight.

En Mountain Lion, debes habilitar "Preferencias del sistema - > Accesibilidad - > Habilitar el acceso para dispositivos de asistencia" y cambiarlo un poco para que las soluciones de la aplicación AppleScript funcionen correctamente:

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 de shell "externo" (backup.sh):

Este es el enfoque final que utiliza el OP. Tomado de aquí . En Mavericks (y probablemente más adelante), debe permitir que la aplicación AppleScript controle la computadora en "Preferencias del sistema - > Seguridad y privacidad - > Privacidad - > Accesibilidad". Uno puede cargar el .sh completo (colocado dentro de la aplicación en 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

Puedes refinar la aplicación AppleScript verificando si Terminal ya tiene ventanas abiertas y crear una nueva para ejecutar el script de 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
    
respondido por el klanomath 03.02.2016 - 14:44
0

Ejecuta chmod 755 NameOfYourScript desde el terminal, luego ./NameOfYourScript

Si ls aparecerá en verde

    
respondido por el Didaktikos 04.02.2016 - 10:38

Lea otras preguntas en las etiquetas