如何为命令指定存储在文件中的多个输入参数?

如何为命令指定存储在文件中的多个输入参数?

我想通过以下方式将多个网页转换为 pdf 文件:

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

如果我将两个输入参数放入名为“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

我该如何根据文件指定输入参数?以下不起作用:

$ 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

答案1

当您在 中使用双引号时"$(cat links)",shell 将文件的整个内容视为一个字符串,而不是分隔的字段(每个字段是文件中的一行)。

你可以这样做:

set -f  # Turn off globbing
IFS='   # Split on newline only
'
wkhtmltopdf $(cat links) all.pdf

答案2

你可以:

readarray -t a < file
wkhtmltopdf "${a[@]}" all.pdf

  • readarray逐行将其读file入数组,-t删除尾随换行符。
  • "${a[@]}"引用所有数组元素。这会生成以下形式的命令:
wkhtmltopdf "${a[0]}" "${a[1]}" "${a[2]}" "..." all.pdf

相关内容