0 votos

error con automator applescript "do shell script" call (archivo no encontrado) pero la línea de comandos con el mismo comando funciona

Tengo una simple automator aplicación que se ejecuta un script sencillo. Se utiliza ssh a abrir un archivo en el equipo local, MachineA, con una aplicación en la máquina remota, MachineB, y los registros de la llamada ssh.

on run {input, parameters}
    repeat with fn in input
        set fn to POSIX path of fn
        set fn to "/Volumes/MachineA" & fn
        set fn to "\"/usr/bin/open -a /Applications/Preview.app " & fn & "\""
        set cmd to "ssh -x MachineB.local " & quoted form of fn
        do shell script "echo " & cmd & " >> ~/cmd.log"
        do shell script cmd
    end repeat
end run

El registro de salida es:

ssh -x MachineB.local "/usr/bin/open -a /Applications/Preview.app /Volumes/MachineA/Users/<USER>/Documents/<FOLDER>/<FILE>.pdf"

Cuando yo uso la aplicación para abrir un archivo (drag & drop), se genera un error.

error message

Sin embargo, si puedo copiar el resultado en el archivo de registro para la línea de comandos, el éxito, el archivo se abre en la máquina remota. ¿Por qué la diferencia?

0voto

Nate Puntos 220

Yo no he probado este, pero parece que tiene demasiados niveles de cita allí. Manualmente poner comillas dobles alrededor de el comando que se ejecutará a través de ssh (en set fn to "\"/usr/bin/open ... & "\"" de la línea), y , a continuación, utilizar quoted form of fn, lo que añade otro nivel de comillas. Se ve muy bien cuando te echo , pero eso es debido a que la cáscara analiza & elimina un nivel de comillas antes de pasar a la echo comando.

También, si la ruta de acceso del archivo contiene espacios o caracteres divertidos, las que deben ser citado (pero sólo ese camino, no a todo el comando). Pruebe esto en su lugar:

on run {input, parameters}
    repeat with fn in input
        set fn to POSIX path of fn
        set fn to "/Volumes/MachineA" & fn
        set fn to "/usr/bin/open -a /Applications/Preview.app " & quoted form of fn
        set cmd to "ssh -x MachineB.local " & quoted form of fn
        do shell script "echo " & quoted form of cmd & " >> ~/cmd.log"
        do shell script cmd
    end repeat
end run

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