Tente:
# disable shell filename generation (globbing)
# and temporarily save applicable shell state
set -f -- "-${-:--}" "${IFS+IFS=\;}" "$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"
Isso é muito cauteloso ao restaurar todo o estado do shell depois de possivelmente alterar os atributos aplicados universalmente. Mas o preceito básico é apenas para definir o divisor do shell em $IFS
, para cuidar de não para glob no caso de qualquer expansão de substituição de comando incluir [?*
e, em seguida, expandi-lo sem ser incluído em um lista de argumentos.
Isso pode ser feito de maneira muito mais simples em um subshell, porque você não precisa viver com nenhum efeito secundário:
( set -f; IFS='
'; wkhtmltopdf $(cat) allurl.pdf
) <myurls