Ich mache einen Automator-Dienst, und der erste Teil nimmt Dateien und RARs sie mit einem Bash-Skript
In Automator habe ich also eine Aktion Get Specific Finder Items, um den Workflow zu testen, und dann das Bash-Skript
F=''
for i in "$@"; do
F="$F \"${i//\"/\\\"}\""
done
/usr/local/bin/rar a ~/archive.rar $F
Es nimmt also einfach die Dateipfade, setzt sie in Anführungszeichen und führt dann den RAR-Befehl mit allen Dateien als Argumente aus. Wenn ich dies ausführe, gibt mir Automator den Fehler
„/Users/user/test.txt“ kann nicht geöffnet werden. Keine solche Datei oder Verzeichnis
~/archive.rar kann nicht erstellt werden. Keine solche Datei oder Verzeichnis
Keine Ahnung, warum es diese Fehler bekommt. Wenn ich dem letzten Befehl ein Echo hinzufüge
echo /usr/local/bin/rar a ~/archive.rar $F
Die Ergebnisse sind genau der Befehl, den ich brauche. Ich kann es kopieren und im Terminal einfügen und es funktioniert.
Führt Automator Bash-Skripte anders aus als im Terminal?
bash
führt eine Erweiterung $@
anders als alle anderen Umgebungsvariablen aus, um Leerzeichen usw. in Argumenten beizubehalten. Von 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).
rar
Sie sollten also im Grunde in der Lage sein , innerhalb der Shell-Skriptaktion ohne Parsing aufzurufen :
/usr/local/bin/rar a ~/archive.rar "$@"
Seltsames automatisches Zitieren hinter den Kulissen, das ich nicht herausfinden konnte. Also habe ich gerade diese Problemumgehung durchgeführt, damit es das tut, was ich wollte, obwohl es nicht gerade eine Lösung ist:
echo /usr/local/bin/rar a ~/archive.rar $F | bash
kein Hang
~
wird nicht innerhalb von Anführungszeichen erweitert, also brauchen Sie zumindest~/"archive.rar"
dort. Und ich würde einige Probleme beim Umgang mit Leerzeichen und Zitieren auch für vermuten$F
. Funktioniert es, wenn Sie es direkt im Terminal ausführen?Benutzer3321819
kein Hang
"$@"
direkt an rar übergeben?Benutzer3321819
Benutzer3321819
kein Hang