Se os nomes dos seus arquivos não tiverem nenhuma nova linha, você poderá fazê-lo apenas informando ao shell para dividir a saída de ls
apenas em novas linhas, e não em nenhum espaço em branco como padrão. A divisão é controlada pela variável IFS
, todos os caracteres contidos em IFS
são usados como delimitadores.
IFS=$'\n' # set it to just a newline
convert $(ls -vd ./*.png) output.pdf
Isso ainda pode ter problemas se os nomes dos arquivos forem engraçados o suficiente ou se ls
os manuseia para exibição. Ao imprimir em um terminal, ls
geralmente lista os arquivos em várias colunas. Mas quando a saída não vai para um terminal (o shell lê, aqui), ela age como se -1
fosse dado.
Para trabalhar com a ideia que você começou, você poderia usar eval
.
eval: eval [arg ...]
Combine ARGs into a single string, use the result as input to the shell, and execute the resulting commands.
Mas o problema com eval
é que qualquer coisa e tudo na linha de comando é analisado novamente, e até mesmo coisas que normalmente são seguras, não são. Pense em um arquivo chamado $(touch HELLO)
e o que acontece se um nome como esse for solto na linha de comando.
Além disso, se você seguir esse caminho, talvez queira usar --quoting-style=shell
em vez de -Q
, pois ele pode corresponder mais de perto ao processamento do shell dos caracteres especiais. (Ambos podem ser específicos do GNU ls, mas acho que -v
também é.)