Como especificar vários argumentos de entrada armazenados em um arquivo para um comando?

1

Eu gostaria de converter várias páginas da Web em um arquivo PDF, por:

wkhtmltopdf http://think-like-a-git.net/sections/about-this-site.html http://think-like-a-git.net/sections/about-this-site/who-this-site-is-for.html all.pdf

Se eu colocar os dois argumentos de entrada em um arquivo de texto chamado "links":

http://think-like-a-git.net/sections/about-this-site.html 
http://think-like-a-git.net/sections/about-this-site/who-this-site-is-for.html

como devo especificar os argumentos de entrada em termos do arquivo? O seguinte não funciona:

$ wkhtmltopdf "$(cat links)" all.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
Exit with code 1 due to network error: ContentNotFoundError
    
por Tim 16.12.2015 / 03:48

2 respostas

3

Quando você usou aspas duplas em "$(cat links)" , o shell tratou todo o conteúdo do arquivo como uma string, não campos separados (com cada campo é uma linha no arquivo).

Você pode fazer algo assim:     

set -f  # Turn off globbing
IFS='   # Split on newline only
'
wkhtmltopdf $(cat links) all.pdf
    
por 16.12.2015 / 03:56
1

Você poderia:

readarray -t a < file
wkhtmltopdf "${a[@]}" all.pdf
  • readarray lê o file em um array linha por linha, -t remove a nova linha final.
  • "${a[@]}" refere-se a todos os elementos da matriz. Isso gera um comando no formulário:
wkhtmltopdf "${a[0]}" "${a[1]}" "${a[2]}" "..." all.pdf
    
por 16.12.2015 / 07:42