ファイルに格納されている文字列をコマンドの引数リストとして提供しますか?

ファイルに格納されている文字列をコマンドの引数リストとして提供しますか?

次のテキストファイルにURLリストをインストールしましたmyurls

http://www.examples.com/1
http://www.examples.com/2
http://www.examples.com/3

wkhtmltopdfこれらのURLを入力に渡すにはどうすればよいですか?

ファイルを使わずにURLを保存する簡単な方法は次のとおりです。

wkhtmltopdf http://www.examples.com/1 http://www.examples.com/2 http://www.examples.com/3 all.pdf

おそらく、wkhtmltopdf買収に関する特別な要件があるかもしれませんが、私の質問は次のようになります wkhtmltopdf。ファイルに保存されている(改行で区切られた)文字列のリストをコマンドの引数リストとして提供する方法は?

答え1

努力する:

# disable shell filename generation (globbing) 
# and temporarily save applicable shell state
set -f -- "-${-:--}" "${IFS+IFS=\$2;}" "$IFS" "$@"

# explicitly set the shell's Internal
# Field Separator to only a newline 
eval "IFS='$(printf \\n\')"

# split command substitution into an
# arg array at $IFS boundaries while
# eliding all blank lines in myurls
wkhtmltopdf $(cat <myurls) allurl.pdf

# restore current shell to precmd state
unset IFS; set +f "$@"; eval "$1 shift 2"

通常、適用されるプロパティを変更した後にすべてのシェル状態を復元するときは注意してください。しかし、基本原則はシェルの分離台を$IFS中に入れておくだけです。いいえコマンド置換の拡張にが含まれている場合は[?*globに展開し、引用符なしで引数リストに展開します。

副作用を受ける必要がないため、サブシェルでより簡単で強力に実行できます。

(   set -f; IFS='
';  wkhtmltopdf $(cat) allurl.pdf
)   <myurls

答え2

残念ながら、これは本当ではありませんが、wkhtmltopdf多くのコマンドはファイルからパラメータを読み取るオプションを提供します(wget -iたとえば、これは可能な限り好む方法です)。

ファイルの空白が重要でない場合は、コマンド置換が機能します。

wkhtmltopdf $(cat myurls) all.pdf

を使用すると、このxargs例でも機能しますが、通常実行したい操作がある場合は、最後の実行のページだけが一度だけ実行されることを確認wkhtmltopdfする必要があります。all.pdfwkhtmltopdf

xargs -a myurls sh -c 'wkhtmltopdf "$@" all.pdf'

wkhtmltopdf 標準入力からパラメータを読み取るオプションをサポートします。--read-args-from-stdin。これを使用して改行区切りのURLを指定した場合は繰り返します。これを防ぐには、標準入力がすべてのURLがスペースで区切られた1行であることを確認する必要があります。

tr "\n" " " < myurls | wkhtmltopdf --read-args-from-stdin all.pdf

答え3

そしてxargs

xargs -a myurls sh -c 'wkhtmltopdf $@ all.pdf'

答え4

別の方法:

wkhtmltopdf $(printf '%s ' $(<myurls)) all.pdf

関連情報