1 votes

Comment puis-je empêcher AppleScript de convertir des variables comme " \087 " en leur forme octale lors du passage dans bash ?

J'ai un programme que j'utilise pour écrire du xml avec des variables, et il passe par AppleScript et bash pour former le xml final. Cependant, l'une de mes variables commence généralement par "024", "054", ou d'autres codes à trois chiffres qui, associés au "\", forment un caractère octal, comme "," pour " \054 ". Une fois qu'elles sont passées dans bash, elles sont remplacées par ces caractères octaux. Ces variables doivent rester telles qu'elles sont, car elles font partie d'un chemin de fichier dont le xml est extrait. Malheureusement, je ne peux pas changer ces variables parce qu'elles sont liées à beaucoup d'autres choses qui fonctionnent correctement, et les backslashes sont obligatoires aussi. Je veux savoir s'il existe un moyen d'empêcher AppleScript de mettre en œuvre l'encodage octal sur ce script lors de son passage. Un collègue a recommandé d'utiliser iconv, que j'ai essayé sans succès, en partie parce que je ne suis pas sûr de savoir comment l'utiliser correctement. Voici l'AppleScript pour référence :

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"

Et le résultat :

<?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>

Merci pour votre aide !

Edit : merci Gordon Davisson pour avoir rendu le code visible, et mis à jour les codes au strict minimum pour reproduire la question.

1voto

Gordon Davisson Points 30215

On dirait que do shell script exécute le script sous l'onglet sh qui est en fait bash en mode de compatibilité ; dans ce mode, la version intégrée de la fonction echo semble penser qu'elle doit interpréter certaines séquences d'échappement (backslash). C'est l'une des nombreuses caractéristiques de echo qui ne sont pas cohérentes entre les versions/modes/etc. La norme POSIX pour echo dit : "Il n'est pas possible d'utiliser echo portabilité sur tous les systèmes POSIX, sauf si les deux -n (comme premier argument) et les séquences d'échappement sont omises."

Donc, ma première recommandation est d'utiliser printf '%s\n au lieu de echo (et la barre oblique inversée devra être doublée pour qu'elle passe le cap d'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"

Mais même avec echo Si vous n'entrez pas dans le jeu, vous avez toujours plusieurs niveaux de guillemets et d'échappatoires qui prêtent à confusion en raison de l'interprétation par AppleScript et le shell. Je recommanderais de stocker le XML en tant que variable AppleScript (en utilisant un seul niveau de guillemets/échappatoires, pour la consommation par AppleScript), puis d'utiliser la commande quoted form of pour le citer/échapper pour l'utiliser dans la commande shell :

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"

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X