Похож на канонический способ выполнить в этом bash
что-то как
unset args
while IFS= read -r line; do
args+=("$line")
done < file
cmd "${args[@]}"
или, если Ваша версия удара имеет mapfile
:
mapfile -t args < filename
cmd "${args[@]}"
Единственная разница, которую я могу найти между mapfile и, в то время как - считал цикл по сравнению с остротой
(set -f; IFS=$'\n'; cmd $(<file))
это, первый преобразует пустую строку в пустой аргумент, в то время как острота проигнорирует пустую строку. В этом случае поведение остроты - то, что я предпочел бы так или иначе, так двойная премия на нем являющийся компактным.
Я использовал бы IFS=$'\n' cmd $(<file)
но это не работает, потому что $(<file)
интерпретируется для формирования командной строки прежде IFS=$'\n'
вступает в силу.
Хотя это не работает в моем случае, я теперь узнал что много строк завершения поддержки инструментов с null (\000)
вместо newline (\n)
который действительно делает многое из этого легче при контакте с, скажем, именами файлов, которые являются общими источниками этих ситуаций:
find / -name '*.config' -print0 | xargs -0 md5
подает список полностью определенных имен файлов как аргументы md5 без любого globbing или интерполяции или что бы то ни было. Это приводит к невстроенному решению
tr "\n" "\000" <file | xargs -0 cmd
хотя это также игнорирует пустые строки, хотя это действительно получает строки, которые имеют только пробел.
добавьте эту строку к разделу [Global] smb.conf
guest account = dave