0 votes

Problème avec Automator et bash script

Je fais un service automator, et la première partie prend les fichiers et les RARs en utilisant un bash script.

Donc, dans Automator, j'ai une action Get Specified Finder Items pour tester le flux de travail, et ensuite le bash script.

F=''
for i in "$@"; do 
    F="$F \"${i//\"/\\\"}\""
done

/usr/local/bin/rar a ~/archive.rar $F

Il prend donc les chemins d'accès aux fichiers, les met entre guillemets, puis exécute la commande RAR avec tous les fichiers comme arguments. Lorsque je lance cette commande, Automator me donne l'erreur suivante

Impossible d'ouvrir "/Users/user/test.txt" Aucun fichier ou répertoire de ce genre

Impossible de créer ~/archive.rar Aucun fichier ou répertoire de ce type

Je ne sais pas pourquoi il y a ces erreurs. Lorsque j'ajoute un écho à la dernière commande

echo /usr/local/bin/rar a ~/archive.rar $F

Les résultats sont exactement la commande dont j'ai besoin. Je peux la copier et la coller dans le terminal et elle fonctionne.

Est-ce que automator exécute les bash scripts différemment de ce qu'ils seraient exécutés en terminal ?

2voto

nohillside Points 82672

bash l'expansion de la $@ différent de toutes les autres variables d'environnement pour préserver les espaces blancs, etc. dans les arguments. À partir 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).

Donc, en gros, vous devriez être capable d'appeler rar dans l'action Shell script sans aucune analyse :

/usr/local/bin/rar a ~/archive.rar "$@"

-1voto

Ethan Leroy Points 3512

Une citation automatique bizarre se déroule dans les coulisses et je n'ai pas réussi à la comprendre. J'ai donc fait ce contournement pour obtenir ce que je voulais, bien que ce ne soit pas exactement une solution :

echo /usr/local/bin/rar a ~/archive.rar $F | bash

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