Bash Linux случайный генератор Пароля CLI и' <'

С 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 нужно некоторое заключение в кавычки. Можно использовать обратную косую черту, но могло бы быть похожим на продолжение строки, если у Вас нет “видимого пробела” в Вашем редакторе.
4
19.06.2012, 12:38
2 ответа

В случае, если Вы задаетесь вопросом, это - просто менее общее использование входного редиректора. Оболочка берет файл, указанный, как введено, и его поведение по умолчанию состоит в том, чтобы повторить его к 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".:)

11
27.01.2020, 20:47
  • 1
    Это "стандартно", в том смысле, что любой POSIX sh должен проанализировать перенаправления из где угодно в простой команде (даже в середине). Это просто редко для не помещения их в конец. –  ormaaj 15.06.2012, 11:13
  • 2
    Вы знаете, я почти возвратился и изменил ту формулировку, таким образом, я шел вперед и обновил ее теперь. Вы правы... Я в основном просто заключал страницу в кавычки в ссылке. Более следует сказать, что это "менее распространено" потому что насколько я знаю, что это - очень хорошо поддерживаемое использование. –   15.06.2012, 17:06

Попробовать < /usr/include/stdio.h head — это должен быть файл, чувак.

В случае, если Вам нужен вывод программы, даваемый как файл, он может быть сделан этот путь: vim <(echo test)

2
27.01.2020, 20:47
  • 1
    за непринятие, ответом palintropo является просто слишком полное исправление –  Mike Pennington 22.06.2012, 19:14
  • 2
    @MikePennington, я не думаю, что это - больше, лучше, но nevermind так или иначе. –  poige 22.06.2012, 19:53

Теги

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