На странице руководства sudoers
User_List ::= User |
User ',' User_List
User ::= '!'* user name |
'!'* #uid |
'!'* %group |
'!'* %#gid |
'!'* +netgroup |
'!'* %:nonunix_group |
'!'* %:#nonunix_gid |
'!'* User_Alias
просто используйте (группа со странным названием):
%stupiduser HOSTS_HERE = /usr/bin/su - stupid
Ожидает закрытия }
. Вы вошли в список с одной командой, date}
и новой строкой, поэтому вы все еще находитесь внутри группы команд и можете либо добавить другую команду в список, либо завершить его.
Таким образом, он не ждет стандартного ввода (точно), он ждет, пока вы завершите команду, которую вы запустили в первой строке. Если вы введете здесь }
, вы (вероятно) получите сообщение об ошибке от команды date
о том, что она не понимает "}
".
{
и }
- допустимые аргументы для общих команд, как показано в пункте 1. Например, find
использует {}
в качестве аргумента. .
В частности, только слова « {
» и «}
» являются зарезервированными словами . Зарезервированные слова в оболочке имеют значение только тогда, когда они даны как отдельное слово целиком и только там, где они конкретно ожидаются. Наиболее важное место, где они ожидаются, - это начало команды.
Точка с запятой или новая строка означает, что }
появляется в начале следующей команды в списке, где его можно распознать как зарезервированное слово с учетом его особой обработки.Это указано в POSIX для грамматики оболочки :
Это правило также подразумевает, что зарезервированные слова не распознаются, за исключением определенных позиций во входных данных, например, после
или
<точка с запятой>
; грамматика предполагает, что если зарезервированное слово предназначено, оно правильно разграничено пользователем
. Было бы неприятно, если бы «then», другое зарезервированное слово, нельзя было использовать как обычное слово, так что в основном это имеет смысл. (
и )
, напротив, являются операторами, могут появляться где угодно, и их нужно экранировать, если они используются для своих буквальных значений. По сути, это исторический артефакт, и, возможно, будет сделан более последовательный выбор в том или ином направлении, или, возможно, потребуется более сложный синтаксический анализатор.
В частности, для Bash фигурные скобки для группировки команд также необходимо отличать от фигурных скобок для раскрытия фигурных скобок , а синтаксический анализатор делает предположение, что вы вряд ли будете расширять фигурные скобки для команды, начинающейся с пространство.
Существует выбор, поддерживать ли историческую совместимость в крайнем случае или нет, и некоторые другие оболочки, такие как zsh, имеют более умные синтаксические анализаторы и могут работать с {date}
в том смысле, который вы намеревались .
Он ждет, пока вы завершите команду. То же самое происходит, если вы напишете неполную команду if или while или другие:
$ if date
>
Команда четко определена в руководстве:
{ list; }
является составной командой:
Составные команды
{ list; } список должен быть завершен новой строкой или точкой с запятой.
Там четко указано: "завершается новой строкой или точкой с запятой"