Если команды не используют stdin
, используйте xargs
, который считывает ввод и преобразует его в аргументы (обратите внимание, что я использую команду echo
чтобы показать, как xargs
создает команду):
$ xargs echo md5sum
# paste text
createsnapshot.sh
directorylisting.sh
fetchfile.sh
# press Ctrl-D to signify end of input
md5sum createsnapshot.sh directorylisting.sh fetchfile.sh
Использование xargs
с -d '\ n'
, чтобы каждая строка принималась как полный аргумент , без учета пробелов:
$ xargs -d'\n' md5sum
# paste
a file with spaces
afilewithoutspaces
foo " " bar
# Ctrl D
md5sum: a file with spaces: No such file or directory
md5sum: afilewithoutspaces: No such file or directory
md5sum: foo " " bar: No such file or directory
Как видите, md5sum
печатает ошибки для каждого имени файла, независимо от других пробелов в именах файлов.
Если вы хотите использовать xclip
, вы можете передать его по конвейеру или иным образом передать в xargs:
xargs -a <(xclip -o) -d '\n' md5sum
xclip -o | xargs -d '\n' md5sum
Это должно надежно работать с именами файлов с пробелами.
Вы можете сделать это, используя символ разрыва строки:\
. Также вы должны объявить и экспортировать в две разные строки, поэтому:
DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:\
$HOME/anaconda2/lib:\
/usr/local/lib:/usr/lib:\
/opt/intel/compilers_and_libraries/mac/lib:\
/opt/intel/mkl/lib:\
$DYLD_FALLBACK_LIBRARY_PATH
export DYLD_FALLBACK_LIBRARY_PATH
Ваш профиль bash представляет собой файл конфигурации и своего рода сценарий.
DYLD_FALLBACK_LIBRARY_PATH="/opt/intel/mkl/lib:$DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH="/opt/intel/compilers_and_libraries/mac/lib:$DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH="/usr/local/lib:/usr/lib:$DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH="/usr/local/cuda/lib:$HOME/anaconda2/lib:$DYLD_FALLBACK_LIBRARY_PATH"
export DYLD_FALLBACK_LIBRARY_PATH
Или с конкатенацией массива и строки:
paths=(
/usr/local/cuda/lib
"$HOME/anaconda2/lib"
/usr/local/lib
/usr/lib
/opt/intel/compilers_and_libraries/mac/lib
/opt/intel/mkl/lib
${DYLD_FALLBACK_LIBRARY_PATH:+"$DYLD_FALLBACK_LIBRARY_PATH"}
)
oldIFS="$IFS"; IFS=:
export DYLD_FALLBACK_LIBRARY_PATH="${paths[*]}"
IFS="$oldIFS"; unset oldIFS
Этот последний элемент в массиве будет расширен до значения переменной DYLD_FALLBACK_LIBRARY_PATH
или ничего, если он не установлен или пуст.
Расширением "${paths[*]}"
будут пути, объединенные в единую строку, разделенную первым символом переменной IFS
.