Estoy creando un servicio de automatización, y la primera parte toma archivos y los RAR usando un script bash
Entonces, en Automator, tengo una acción Obtener elementos del buscador especificados para probar el flujo de trabajo y luego el script bash
F=''
for i in "$@"; do
F="$F \"${i//\"/\\\"}\""
done
/usr/local/bin/rar a ~/archive.rar $F
así que simplemente toma las rutas de los archivos, las comillas y luego ejecuta el comando RAR con todos los archivos como argumentos. Cuando ejecuto esto, el automatizador me da el error.
No se puede abrir "/Users/user/test.txt" No existe tal archivo o directorio
No se puede crear ~/archive.rar No existe tal archivo o directorio
No tengo idea de por qué está recibiendo esos errores. Cuando agrego un eco al último comando
echo /usr/local/bin/rar a ~/archive.rar $F
Los resultados son exactamente el comando que necesito. Puedo copiarlo y pegarlo en la terminal y funciona.
¿Automator ejecuta scripts bash de manera diferente a como se ejecutarían en la terminal?
bash
hace una expansión $@
diferente a todas las demás variables de entorno para preservar los espacios en blanco, etc. en los argumentos. de 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).
Entonces, básicamente, debería poder llamar rar
dentro de la acción Shell Script sin ningún análisis:
/usr/local/bin/rar a ~/archive.rar "$@"
Citas automáticas extrañas detrás de escena que no pude entender. Así que hice esta solución para que hiciera lo que quería, aunque no es exactamente una solución:
echo /usr/local/bin/rar a ~/archive.rar $F | bash
sin ladera
~
no se expande dentro de las comillas, por lo que necesita al menos~/"archive.rar"
allí. Y sospecharía algunos problemas con el manejo de espacios y las citas también para$F
. ¿Funciona si lo ejecuta directamente en la Terminal?usuario3321819
sin ladera
"$@"
a rar directamente?usuario3321819
usuario3321819
sin ladera