Manera fácil de ejecutar script de shell

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 pueda interrumpir con ) ctrl + C.

Ahora mismo, tengo unbackup.sh

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

que he cambiado de nombre backup.commandpara poder hacer doble clic en Finder y funciona perfectamente. Pero no puedo buscarlo en Spolight porque quiero que Spotlight solo busque Aplicaciones, Preferencias del sistema y Contactos, y si marco Desarrollador, muestra backup.commandpero también muchos archivos no deseados que simplemente son innecesarios.

¿Qué puedo hacer?

Traté de aplicarlo , pero luego 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. ¿Cualquier sugerencia?

tal vez esto sea posible: aplique una secuencia de comandos, que abre una terminal y ejecuta su secuencia de comandos dentro de esta terminal.
Puede excluir los directorios que contienen archivos de desarrollador no deseados para que no se muestren en Spotlight. Puede hacerlo en Spotlight -> Privacidad (también puede arrastrar carpetas desde el buscador).
@hirnwunde Eso sería genial, pero no sé cómo.
@MateuszSzlosek Me gustaría excluir todo .
¿Hay alguna buena razón por la que no pueda simplemente llamarlo backup, colocarlo en el $PATHy simplemente llamarlo desde una Terminal escribiendo backupy presionando Enter? Además, ¿por qué no usar Time Machine? Parece que sería mucho más fácil que todo lo que has estado haciendo para que esto funcione.
@ user3439894 Realmente no me importa dónde ponerlo o qué nombre usar, pero lo que quiero evitar es abrir la Terminal para llamar al script. Además, no necesito Time Machine ya que este es un script para duplicar el contenido de una memoria USB en otra memoria USB (de hecho, no quiero Time Machine, además creo que no funciona para eso).
Sí, Time Machine no funcionaría en eso y pensé que estaba haciendo una copia de seguridad de interno a externo, no de externo a externo, lo siento. De todos modos, por lo que no desea llamarlo desde la Terminal, luego colóquelo en el Dock o el Escritorio, entonces no necesita usar Spotlight. Aunque sé que va a decir que no desea colocarlo en el Dock o en el escritorio, por lo que sin habilitar Desarrollo en Spotlight, entonces la respuesta de klanomath es probablemente la mejor solución para usar Spotlight sin habilitar Desarrollo en Spotlight.
Vea esto de superusuario: superuser.com/questions/221964/…

Respuestas (2)

Aplicando con Ornitorrinco:

Descarga Platypus y crea una aplicación desde el script de shell.

Ejemplo:

ingrese la descripción de la imagen aquí

La configuración anterior crea una aplicación con una barra de progreso (incluidos los detalles) y se puede cerrar; sin embargo, el proceso rsync debe cancelarse (eliminarse) manualmente.

ingrese la descripción de la imagen aquí

La aplicación en sí se puede encontrar con Spotlight.


Solución simple de AppleScript:

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"

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, anteponga sudo -> "sudo caffeinate -s..."

Puede refinar la aplicación AppleScript comprobando 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, debe habilitar "Preferencias del sistema -> Accesibilidad -> Habilitar 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 está utilizando 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 completo .sh(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

Puede refinar la aplicación AppleScript comprobando 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
¿No hay una manera fácil de hacer esto sin ninguna aplicación adicional?
@Manuel Con tus rígidas preferencias de Spotlight, no veo otra posibilidad. Una aplicación AppleScript es la otra posibilidad.
Las "preferencias rígidas" son lógicas, no necesito nada más y no quiero enviar spam a mis búsquedas solo porque quiero poder iniciar backup.sho backup.command. En cualquier caso, ¿cómo funcionaría esa solución de AppleScript?
Agregué activatepara traer la ventana de Terminal al frente. Si eso no está bien, entonces, por supuesto, puede eliminarlo.
@klanomath Probaré el AppleScript con la ayuda de esta pregunta y volveré ;)
@klanomath El script me dio error -25211cuando la Terminal estaba abierta, pero lo resolví con la ayuda de esta pregunta . En cualquier caso, si la Terminal no se está ejecutando, se abren dos ventanas cuando se ejecuta el script. Estoy ejecutando Mountain Lion.
@Manuel Hmm, no me funciona, pero puede editarlo usted mismo: agregue un apéndice como: en Mountain Lion, reemplace las líneas xyz del guión con el contenido blublublu por blablabla

Ejecutar chmod 755 NameOfYourScriptdesde la terminal, luego./NameOfYourScript

Si te lsaparecerá verde

Quiero evitar abrir desde la terminal.
@Manuel se llama shell script por una razón, definitivamente será la forma más fácil
Creo que se llama shell script porque está escrito en shell. A veces desea ejecutar cosas desde el shell, a veces desea ejecutarlas desde la interfaz gráfica de usuario.