С Zsh 4.3.11, можно использовать Z
расширение параметра отмечает для разделения строкового значения согласно нормальным правилам парсинга оболочки при отбрасывании комментариев (C
опция к Z
) и обработка новых строк как нормальный пробел вместо того, чтобы заменить их точками с запятой (n
опция к Z
). Можно затем сшить результаты назад вместе (j::
) и оцените уровень заключения в кавычки (Q
) позволять Вам заключить в кавычки пробел и другие проблематичные символы (как “пустой” комментарий introducer символы):
PS1=${(j::Q)${(Z:Cn:):-$'
%F{063}%1 # format blue
~ # show current directory
%f" "
%(1v.%F{099}%1v %f.) # show git branch if git repo in purple
%F{063} # format blue
%# # % for user and # for root
%f" "
'}}
Примечание: Этот режим парсинга, кажется, знает, что должен проанализировать целое %(v…)
выражение как отдельное слово, таким образом, мы не должны защищать пространство, встроенное в условное значение. Однако мы действительно должны защитить “высокоуровневые” пробелы (те, которые, оказывается, приезжают после %f
) так как они будут иначе взяты в качестве нормального разделителя слов. Заключительная закрывающая кавычки передача обработает любой механизм заключения в кавычки (т.е. \
, ''
, ""
, $''
), таким образом, можно выбрать то, что Вы используете, чтобы защитить специальные символы (например, “высокоуровневые” пробелы или прокомментировать introducers, предназначенный для окончательного значения).
Если Вы не используете 4.3.11, то можно использовать массив, чтобы позволить Вам вкрапить комментарии строковыми элементами. Необходимо будет, вероятно, использовать больше заключения в кавычки, чем с Z
флаг расширения параметра, но результат может все еще быть терпимым.
ps1_arr=(
%F{063}%1 # format blue
\~ # show current directory
%f' '
'%(1v.%F{099}%1v %f.)' # show git branch if git repo in purple
%F{063} # format blue
%\# # % for user and # for root
%f' '
)
PS1=${(j::)ps1_arr}
Некоторые примечания по заключению в кавычки:
~
если Вы говорите %1~
вместо того, чтобы разделить его (это %~
с аргументом 1
, в конце концов).%(v…)
для слова, но только круглых скобок и пространства нужна защита.#
в %#
если у Вас есть включенный EXTENDED_GLOB.%f
нужно некоторое заключение в кавычки. Можно использовать обратную косую черту, но могло бы быть похожим на продолжение строки, если у Вас нет “видимого пробела” в Вашем редакторе.В случае, если Вы задаетесь вопросом, это - просто менее общее использование входного редиректора. Оболочка берет файл, указанный, как введено, и его поведение по умолчанию состоит в том, чтобы повторить его к stdout.
Разбивка команды Вы имеете:
< /dev/urandom tr -dc A-Za-z0-9_ | head -c9
<
: Входной редиректор. Shell повторяет содержание файла (/dev/urandom)
tr
: от tr --help
:
Переведите, сожмите и/или удалите символы из стандартного входа, пишущий в стандартный вывод.
Опции-dc эквивалентны - удаляют - дополнение, что означает удалять дополнение следующего набора символов, т.е. всех символов NOT в наборе. Это исключает не алфавитно-цифровые и символы подчеркивания в Вашем примере.
head
: распечатайте первые несколько строк чего-то (значение по умолчанию 10). переключатель-c9 говорит этому сколько байтов печатать вместо строк.
Соедините все это, и Вы добираетесь, "распечатайте меня первые алфавитно-цифровые 9 или подчеркните байты от/dev/urandom".:)
Попробовать < /usr/include/stdio.h head
— это должен быть файл, чувак.
В случае, если Вам нужен вывод программы, даваемый как файл, он может быть сделан этот путь: vim <(echo test)