Tworzę usługę automatora, a pierwsza część pobiera pliki i RAR-y za pomocą skryptu bash
Tak więc w Automatorze mam akcję Get Specified Finder, aby przetestować przepływ pracy, a następnie skrypt bash
F=''
for i in "$@"; do
F="$F \"${i//\"/\\\"}\""
done
/usr/local/bin/rar a ~/archive.rar $F
więc po prostu pobiera ścieżki plików, umieszcza wokół nich cytaty, a następnie uruchamia komendę RAR ze wszystkimi plikami jako argumentami. Kiedy to uruchomię, automat daje mi błąd
Nie można otworzyć „/Users/user/test.txt” Brak takiego pliku lub katalogu
Nie można utworzyć ~ / archive.rar Brak takiego pliku lub katalogu
Nie ma pojęcia, dlaczego tak się dzieje. Kiedy dodaję echo do ostatniego polecenia
echo /usr/local/bin/rar a ~/archive.rar $F
Wyniki są dokładnie tym, czego potrzebuję. Mogę go skopiować i wkleić w terminalu i to działa.
Czy automatyzator uruchamia skrypty bash inaczej, niż uruchamia się w terminalu?
źródło
~
nie jest rozszerzany w cudzysłowie, więc potrzebujesz przynajmniej~/"archive.rar"
tam. I podejrzewałbym pewne problemy z obsługą przestrzeni i cytowaniem również$F
. Czy to działa, jeśli uruchamiasz go bezpośrednio w Terminalu?"$@"
rar bezpośrednio?Odpowiedzi:
bash
robi ekspansję$@
inne niż wszystkie inne zmienne środowiskowe, aby zachować białe argumenty w argumentach. Zbash(1)
:Więc zasadniczo powinieneś móc dzwonić
rar
w akcji skryptu powłoki bez żadnego parsowania:źródło
Dziwne auto-cytowanie za kulisami, których nie mogłem zrozumieć. Więc po prostu zrobiłem to obejście, aby zrobić to, co chciałem, chociaż nie do końca:
źródło