Проблема с Automator и скриптом bash

Я делаю сервис-автомат, и первая часть берет файлы и 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-скрипты иначе, чем в терминале?

~не раскрывается внутри кавычек, поэтому вам нужно хотя бы ~/"archive.rar"там. И я подозреваю некоторые проблемы с обработкой пробелов и цитированием также для $F. Это работает, если вы запускаете его прямо в терминале?
Упс, да, я не хотел заключать в кавычки ~/archive.rar. и на самом деле, да, это также не работает в терминале, ошибка говорит, что он все еще не может открыть файл (ы) в аргументах
Почему вы предварительно обрабатываете $@ в $F, вы не можете "$@"напрямую перейти к rar?
При передаче "$@" все пути к файлам будут переданы как 1 длинная строка. Каждый аргумент пути к файлу должен быть заключен в кавычки.
При вызове команды происходит какое-то странное автоматическое цитирование, которое все портит. Поскольку повторение команды на самом деле отображает правильную команду, я могу просто передать ее в bash, и она отлично работает, лол....
Вы пробовали?

Ответы (2)

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
Пожалуйста, добавьте рабочие скрипты, чтобы другие тоже могли воспользоваться.