Как сломать длинную строку в .bash_profile

Если команды не используют 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

Это должно надежно работать с именами файлов с пробелами.

0
27.07.2018, 16:03
2 ответа

Вы можете сделать это, используя символ разрыва строки:\. Также вы должны объявить и экспортировать в две разные строки, поэтому:

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 представляет собой файл конфигурации и своего рода сценарий.

1
28.01.2020, 02:23
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.

2
28.01.2020, 02:23

Теги

Похожие вопросы