0 votos

Problema con Automator y bash script

Estoy haciendo un servicio de automator, y la primera parte coge los archivos y los RARs usando un bash script

Así que en Automator, tengo una acción Get Specified Finder Items para probar el flujo de trabajo, y luego el bash script

F=''
for i in "$@"; do 
    F="$F \"${i//\"/\\\"}\""
done

/usr/local/bin/rar a ~/archive.rar $F

por lo que sólo toma las rutas de los archivos, los pone entre comillas y luego ejecuta el comando RAR con todos los archivos como argumentos. Cuando ejecuto esto, automator me da el error

No se puede abrir "/Usuarios/usuario/prueba.txt" No existe tal archivo o directorio

No se puede crear ~/archive.rar No existe tal archivo o directorio

No se sabe por qué se producen esos errores. Cuando añado un eco al último comando

echo /usr/local/bin/rar a ~/archive.rar $F

Los resultados son exactamente el comando que necesito. Puedo copiar y pegar en la terminal y funciona.

¿Automator ejecuta los bash scripts de forma diferente a como lo harían en terminal?

2voto

bash la expansión de $@ diferente a todas las demás variables de entorno para preservar los espacios en blanco, etc. en los argumentos. Desde bash(1) :

@ Expands  to  the  positional  parameters,  starting from one.  When the expansion occurs
  within double quotes, each parameter expands to a  separate  word.   That  is,  "$@"  is
  equivalent  to  "$1"  "$2" ...  If the double-quoted expansion occurs within a word, the
  expansion of the first parameter is joined with the beginning part of the original word,
  and  the  expansion  of  the last parameter is joined with the last part of the original
  word.  When there are no positional parameters, "$@" and $@  expand  to  nothing  (i.e.,
  they are removed).

Así que básicamente deberías poder llamar a rar dentro de la acción Shell script sin ningún tipo de análisis:

/usr/local/bin/rar a ~/archive.rar "$@"

-1voto

Ethan Leroy Puntos 3512

Una extraña auto-citación entre bastidores que no he podido entender. Así que hice esta solución para conseguir lo que quería, aunque no es exactamente una solución:

echo /usr/local/bin/rar a ~/archive.rar $F | bash

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X