0 votes

Exécution du shell perl script depuis AppleScript sur Mojave

J'ai un simple AppleScript qui appelle un shell perl script pour remplacer une chaîne par une autre chaîne (ici une avec deux) dans des fichiers avec des extensions de fichiers spécifiées (ici .txt et .xyz).

Il fonctionnait exactement comme je l'ai indiqué ci-dessous, mais ce n'est plus le cas. (probablement depuis la mise à jour vers Mojave l'année dernière) .

set CleanFiles to "
    s/one/two/g;
    "

set myFolder to choose folder with prompt "Choose a folder with files to be cleaned up:"
set theFolder to POSIX path of myFolder

do shell script "find " & theFolder & " \\( -name \\*.txt -o -name \\*.xyz \\) -print0 | xargs -0 perl -i -pe '" & CleanFiles & "'"

Il n'y a pas de message d'erreur, il semble s'exécuter mais ne fait rien.

Qu'est-ce qui pourrait ne pas aller ?

0 votes

Eh bien, le plus évident : vous nommez la variable CleanFiles dans la première ligne, mais utilisez CleanElanFiles dans la dernière ligne. Est-ce là le problème, ou simplement une erreur de transcription ?

0 votes

@TedWrigley ooops, sorry no that was a typo - la chose réelle est beaucoup plus complexe mais je l'ai réduite à un exemple minimal ici.

0 votes

Ah. Ok, alors je pense que votre problème est que vous devez citer la ligne du chemin d'accès au dossier. Changez la ligne 3 comme suit set theFolder to quoted form of (POSIX path of myFolder) . Lorsque je fais cela sur mon dossier de test, votre script semble fonctionner.

1voto

Ted Wrigley Points 725

Le problème est que vous devez citer les chemins de fichiers pour unix, en utilisant la commande quoted form of dans AppleScript. En d'autres termes, la ligne 3 devrait se lire comme suit :

set theFolder to quoted form of (POSIX path of myFolder)

Le problème se pose parce que les variables Mac peuvent légalement contenir des caractères spéciaux - comme les espaces et les guillemets simples - que le système unix utilise. Ainsi, si vous choisissiez un dossier nommé "Mon dossier de test", AppleScript renverrait son chemin posix sous la forme suivante /Users/username/My Test Folder mais la ligne de commande invoquée par do shell script le lirait comme trois arguments distincts, et non comme un seul chemin de fichier. Le site quoted form of met entre guillemets et échappe tout caractère spécial unix dans la ligne de texte afin qu'il ne soit pas interprété comme un caractère spécial par l'interpréteur de commandes.

0 votes

Espaces @user3439894 sont des caractères spéciaux à l'interpréteur de commandes : ce sont des délimiteurs d'arguments. si j'écris ls -al /~/username les espaces signifient que 'ls' est la commande, et que '-al' et '/~/username' sont des arguments passés à cette commande. Mélangez les espaces - par exemple, tapez ls -al /~/user name et la commande ne fonctionnera pas comme prévu. Aussi, quoted form of échappe les guillemets simples avec des barres obliques inversées. en d'autres termes quoted form of "'bob'" produira "''\\''bob'\\'''"

0 votes

@user3439894 - Hmph. cette sortie est encore plus bizarre que je ne le pensais...

0 votes

Ouais, ma faute, quand je vérifiais caractères spéciaux dans le bash manuel, je cherchais des symboles et des metacharacter J'ai vu "'|', '&', ';', '(', ')', '<', ou '>'" mais j'ai manqué la partie où il était dit "Un métacaractère est un espace, une tabulation, une nouvelle ligne ou l'un des caractères suivants :". Cela dit, ls -al /~/username retours : ls: /~/username: No such file or directory et ls -al /~/user name retours similaires.

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