Я делаю сервис-автомат, и первая часть берет файлы и RAR-файлы с помощью скрипта bash.
Итак, в Automator у меня есть действие Get Specified Finder Items для проверки рабочего процесса, а затем скрипт bash
F=''
for i in "$@"; do
F="$F \"${i//\"/\\\"}\""
done
/usr/local/bin/rar a ~/archive.rar $F
поэтому он просто берет пути к файлам, заключает их в кавычки, а затем запускает команду RAR со всеми файлами в качестве аргументов. Когда я запускаю это, автомат выдает мне ошибку
Не удается открыть «/Users/user/test.txt». Нет такого файла или каталога.
Невозможно создать ~/archive.rar Нет такого файла или каталога
Не знаю, почему он получает эти ошибки. Когда я добавляю эхо к последней команде
echo /usr/local/bin/rar a ~/archive.rar $F
Результаты - это именно та команда, которая мне нужна. Я могу скопировать и вставить его в терминал, и он работает.
Запускает ли автомат bash-скрипты иначе, чем в терминале?
bash
делает расширение $@
отличным от всех других переменных среды, чтобы сохранить пробелы и т. д. в аргументах. Откуда 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
внутри действия сценария оболочки без какого-либо разбора:
/usr/local/bin/rar a ~/archive.rar "$@"
Странное автоматическое цитирование происходит за кулисами, что я не мог понять. Поэтому я просто сделал этот обходной путь, чтобы заставить его делать то, что я хотел, хотя и не совсем решение:
echo /usr/local/bin/rar a ~/archive.rar $F | bash
без холма
~
не раскрывается внутри кавычек, поэтому вам нужно хотя бы~/"archive.rar"
там. И я подозреваю некоторые проблемы с обработкой пробелов и цитированием также для$F
. Это работает, если вы запускаете его прямо в терминале?пользователь3321819
без холма
"$@"
напрямую перейти к rar?пользователь3321819
пользователь3321819
без холма