Problema com o script Automator e bash


0

Eu estou fazendo um serviço de automação, e a primeira parte pega arquivos e RARs usando um script bash

Então, no Automator, eu tenho uma ação Get Specified Finder Items para testar o fluxo de trabalho e, em seguida, o script bash

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

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

por isso, apenas pega os caminhos de arquivo, coloca aspas em torno deles e executa o comando RAR com todos os arquivos como argumentos. Quando eu corro isso, o automator me dá o erro

Não é possível abrir "/Users/user/test.txt" Nenhum arquivo ou diretório

Não é possível criar ~ / archive.rar Nenhum arquivo ou diretório

Nenhuma pista porque está recebendo esses erros. Quando eu adiciono um eco ao último comando

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

Os resultados são exatamente o comando que preciso. Eu posso copiar e colá-lo no terminal e funciona.

O automator executa scripts bash de maneira diferente, então eles rodariam no terminal?


~ não é expandido dentro de aspas, então você precisa de pelo menos ~/"archive.rar" lá. E eu suspeito de alguns problemas com o manuseio de espaços e citando também para $F. Funciona se você o executar diretamente no Terminal?
nohillside

Opa, sim, eu não queria ter aspas no arquivo ~ / archive.rar. e, na verdade, sim, ele também não funciona no terminal, o erro diz que ainda não é possível abrir o arquivo (s) nos argumentos
user3321819

Por que você pré-processa $ @ em $ F, você não pode passar "$@" para rar diretamente?
nohillside

Passar "$ @" passaria todos os caminhos de arquivo como 1 string longa. Cada argumento do caminho do arquivo precisa ser encapsulado entre aspas
user3321819

Há algumas citações automáticas estranhas acontecendo quando o comando é chamado que estraga tudo. Como ecoar o comando realmente exibe o comando correto, eu posso canalizá-lo para bash, e ele funciona bem lol ....
user3321819

Respostas:


1

bash faz expansão de $@ diferente de todas as outras variáveis ​​de ambiente para preservar espaços em branco, etc. em argumentos. 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).

Então você basicamente deveria poder ligar rar dentro da ação Shell Script sem qualquer análise:

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

Ha isso funcionou e agora me sinto idiota. Obrigado cara.
user3321819

-1

Estranha auto-citação indo nos bastidores que eu não consegui descobrir. Então, eu fiz isso para conseguir fazer o que eu queria, embora não exatamente uma solução:

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

Por favor, adicione os scripts de trabalho para que outros possam se beneficiar também.
nohillside
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.