Что такое подсказка знака процента в оболочке?

16

При просмотре видео я увидел следующее:

% more tinyUF.txt
10
4 3
3 8
6 5

Что это за %знак перед moreкомандой?

Максим Корецкий
источник
2
export PS1=%??
Роман Греф
@ RomanGräf, что это?
Максим Корецкий
1
Вы можете изменить нормальный $знак, используя export PS1=...где ...замена.
Роман Греф
@ RomanGräf, вижу, спасибо за предложение
Максим Корецкий
@Romman Gräf: Вы можете сделать намного больше с подсказкой, чем просто поменять персонажа. Мой включает в себя имя машины (поскольку у меня часто есть окна xterm на других машинах) и несколько последних каталогов в текущем пути. И если я рут, он становится ярко-красным.
jamesqf

Ответы:

29

Это приглашение оболочки, или, точнее, это основное приглашение оболочки ( их несколько ). Это способ оболочки сказать « давай, я готов к вводу сейчас ».

%Приглашение распространено в csh-типе оболочек в то время как sh-shells (как bashи ksh93) обычно использует в $качестве подсказки.

Подсказка обычно меняется #на пользователя root, поскольку достаточно мощному пользователю следует напоминать об этой возможности, имея альтернативную подсказку (как это указано в стандарте POSIX).

Первичные подсказки в shоболочках -типа определяются значением переменной оболочки PS1.


Резюме комментариев ниже, с дополнениями:

Символ #корневого приглашения (используется обоими shи cshоболочками) совпадает с обычным символом комментария оболочки. Копирование и вставка команды с правами root приведет к тому, что вставленная команда станет неработоспособной, если приглашение оболочки также будет скопировано. Обратите внимание, что это #было принято в качестве корневого приглашения до того, как оболочка имела соглашение о комментариях (ссылка: электронное письмо от Дуга Макилроя ).

esИ rcпанцири Plan 9 использует ;символ в качестве значения по умолчанию строки. Следствием этого является то, что копирование и вставка команды, включая приглашение, все равно будет означать, что вставленная команда действительна (и она будет выполнена).

Можно было бы использовать один из способов, позволяющий получить настраиваемое, но все еще копируемое приглашение оболочки, например : something ;, где somethingможет быть текущий каталог, имя хоста или время.

Кусалананда
источник
2
Также в zsh(оболочка в стиле Борна, но с большим количеством функций из tcsh). Обратите внимание, что Bourne-подобные и csh-подобные оболочки обычно используют #для пользователей uid 0.
Стефан
1
Также обратите внимание на то, что здесь rcиспользуются оболочки , похожие на оболочки ;(можно скопировать и вставить всю строку, и это допустимый код оболочки, аналогично тому, как #приглашение root является комментарием).
Стефан
2
очень важный выбор # для root заключается в том, что если вы скопируете команду, включающую его, вы не нанесете ущерба (так как # начинает комментарий, поэтому будет комментировать вашу команду (ну, ее первую строку)). Некоторые люди используют «>», и если вы также скопируете его, он может затереть (полностью очистить) двоичные файлы, если команда имеет полный или относительный путь или если вы находитесь в правильном каталоге (и обладаете достаточными правами, например, если вы корень). Я видел, как это произошло.
Оливье Дюлак
1
@ StéphaneChazelas: Разве соглашение # -for-root не возникло задолго до того, как терминалы, где легко можно вырезать и вставить всю строку, стали обычным явлением?
Хмакхольм покинул Монику
@HenningMakholm, да. Он возник еще до того, как csh представил # в качестве лидера комментариев. Тем не менее, это правда, что #...строки являются комментариями при копировании, даже если это не было намерением. Я не знаю , было ли это намерение за ;в rcтоже, хотя я замечаю , что это удобно следствие.
Стефан