/root/.bashrc :157 := не найдено

У меня была аналогичная проблема после обновления с Leap 15.0 до Leap 15.1:nslookupработало, но pingили что-либо еще, требующее разрешения DNS, не работало. Я сделал все стандартные проверки (resolv.conf, nsswitch.conf, /etc/sysconfig/network/config), и они были в порядке. Переключение с wickedна NetworkManagerи включение dnsmasq, как указано выше, изначально решило мою проблему.

Я копнул немного глубже и нашел здесь подсказку, что это может быть связано с проблемами в конфигурации apparmor:https://forums.opensuse.org/showthread.php/536437-DNS-problem-after-upgrade-from-15-0?p=2906092#post2906092

Аналогично тому потоку в моей системе, в /etc/apparmor.d/abstractions/nameservice.rpmnewбыла обновленная конфигурация, которая разрешила доступ к дополнительным каталогам, используемым nscd. Как только я скопировал этот новый файл конфигурации и очистил кэш apparmor, как описано в этом посте, wickedначал работать, и я смог вернуть конфигурацию моего сетевого менеджера обратно к исходной версии без необходимости использовать dnsmasq.

1
24.05.2021, 19:39
2 ответа

Эта строка не совсем синтаксически правильна (, но bashобрабатывает ее):

if [ $USER == 'root' ]

Вы должны использовать ==только с [[... ]]и =в остальных случаях. Я бы также рекомендовал вам двойную кавычку -$USER, если вы остаетесь с синтаксисом [... ]

if [[ "$USER" == 'root' ]]

или

if [ "$USER" = 'root' ]
3
28.07.2021, 11:29

В zsh=cmd— это оператор расширения имени файла, который заменяется на путь команды cmd. =cmdаналогично $commands[cmd].

Итак, здесь, с ==в одном из аргументов команды [, это расширяет его до пути команды =. Поскольку в вашем $PATHнет команды с именем =, это вызывает ошибку.

Сравните:

$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found

Оператор равенства в команде [имеет вид =. Команда [выполняет только тесты, она не выполняет никаких присваиваний, поэтому нет необходимости различать оператор присваивания и оператор сравнения на равенство, как в некоторых других языках (с =против ==. как в C или :=против =в некоторых других и т. д. ).

Так и должно быть:

[ "$USER" = root ]

Тем не менее [из zsh, как и ksh, также поддерживает ==в качестве альтернативы =, но если вы не отключите параметр equals(, как в ksh. ] emulation ), вам нужно будет заключить хотя бы первый =в кавычки, чтобы избежать этого =cmdоператора:

[ "$USER" '==' root ]

Обратите внимание, что хотя $USERNAMEавтоматически устанавливается с помощью zsh, $USERне является (, хотя он устанавливается как переменная окружения некоторыми вещами, такими какlogin).

Чтобы проверить, есть ли у вас привилегии суперпользователя, более надежно проверить, что ваш эффективный идентификатор пользователя равен 0, что можно сделать в zshили bashс помощью [ "$EUID" -eq 0 ]или (( EUID == 0 )).

См. также:

4
28.07.2021, 11:29

Теги

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