1 votos

¿Cómo puedo evitar que AppleScript convierta variables como "\ 087" a su forma octal al pasar por bash?

Tengo un programa que estoy usando para escribir xml con las variables, y que pasa a través de AppleScript y bash para formar el final xml. Sin embargo, uno de mis variables por lo general comienza con "024", "054", o de otros tres dígitos de los códigos que se emparejan con el "\" forma un carácter octal, igual que "," por "\054". Una vez que se pasa a través de bash, se reemplazan con estos caracteres octales. Estas variables se necesitan para permanecer de esa manera, porque ellos son parte de una ruta de acceso del archivo xml en última instancia tira de. Por desgracia, yo no puedo cambiar estas variables debido a que está relacionado con muchas otras cosas funcionando adecuadamente, y las barras diagonales inversas son obligatorios también. Quiero saber si hay una manera de detener AppleScript desde la implementación de la codificación octal en esta secuencia de comandos a medida que pasa a través. Un colega se recomienda el uso de iconv, que me trató, sin éxito, en parte porque no estoy seguro de cómo usarlo correctamente. Aquí está el AppleScript para la referencia:

do shell script "echo \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?> <scratch project=\\\"TEST\\\"> <file>W:\\Sequences\\087_TLD_TL_Taking_The_Lead\\Shots\\TLD0640\\Versions\\MOV\\TLD0640_v0173.mov\\</file> </scratch>\" > ~/Desktop/Test.xml"

Y el resultado:

<?xml version="1.0" encoding="UTF-8"?> <scratch project="TEST"> <file>W:\Sequences87_TLD_TL_Taking_The_Lead\Shots\TLD0640\Versions\MOV\TLD0640_v0173.mov\</file> </scratch>

Gracias por su ayuda!

Edit: gracias Gordon Davisson por lo que el código es visible, y se actualizan los códigos en el mínimo indispensable para la reproducción de la pregunta.

1voto

Nate Puntos 220

Parece do shell script está ejecutando la secuencia de comandos en la sh shell, que es en realidad bash en modo de compatibilidad; en este modo, el grupo builtin echo comando al parecer piensa que necesita para interpretar algunos de escape (barra diagonal inversa) secuencias. Esta es una de varias características de la echo que no son coherentes entre versiones/modos/etc; como el estándar POSIX para echo dice Que "no es posible el uso de echo portable a través de todos los sistemas POSIX, a menos que ambas -n (como el primer argumento) y las secuencias de escape se omite".

Por lo tanto, mi primera recomendación es usar printf '%s\n en lugar de echo (y la barra diagonal inversa deberá duplicarse para conseguir más allá de AppleScript):

do shell script "printf '%s\\n' \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?> <scratch project=\\\"TEST\\\"> <file>W:\\Sequences\\087_TLD_TL_Taking_The_Lead\\Shots\\TLD0640\\Versions\\MOV\\TLD0640_v0173.mov\\</file> </scratch>\" > ~/Desktop/Test.xml"

Pero incluso con echo conseguir en el acto, usted todavía tiene múltiples confuso niveles de las comillas y se escapa debido a la interpretación de AppleScript y la shell. Yo recomiendo guardar el XML como una variable de AppleScript (con un solo nivel de comilla/escape, para el consumo de AppleScript), a continuación, utilizando quoted form of a/quote escapar que para su uso en el shell de comandos:

set XML_Content to "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <scratch project=\"TEST\"> <file>W:\\Sequences\\087_TLD_TL_Taking_The_Lead\\Shots\\TLD0640\\Versions\\MOV\\TLD0640_v0173.mov\\</file> </scratch>"

do shell script "printf '%s\\n' " & (quoted form of XML_Content) & " > ~/Desktop/Test.xml"

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