Выполненный nvm (колотят функцию) через sudo

D в четвертых средствах столбца, что процесс в настоящее время занят системным вызовом. Это состояние системы обычно длится в течение очень короткого времени, таким образом, необычно наблюдать его. Наблюдение D имеет тенденцию указывать на любого медленный ввод-вывод (например, в сетевой файловой системе) — который ps не делает — или что-то не так в ядре или с аппаратными средствами.

Или Вы наблюдаете ошибку ядра, или некоторая часть Ваших аппаратных средств перестала работать. Для знания больше первый шаг находится в нахождении файлов журнала. Ваша система выполняет BusyBox, и Ваш снимок экрана показывает, что это работает syslogd без параметров, таким образом, все системные журналы находятся в /var/log/messages. Существует хороший шанс, что этот файл содержит некоторый признак того, что идет не так, как надо. Если Вы нуждаетесь в помощи, интерпретируя журналы, редактируете их в свой вопрос (или поднимите их онлайн где-нибудь, если они являются слишком большими).

4
21.04.2014, 14:10
3 ответа

Проблема здесь, как это часто бывает, в различных типах оболочки:

  • Когда вы открываете эмулятор терминала (например, gnome-terminal ), вы запускаете так называемую интерактивную оболочку без входа в систему .

  • Когда вы входите в систему из командной строки или запускаете такую ​​команду, как su имя пользователя или sudo -u имя пользователя , вы запускаете интерактивный вход в систему оболочка.

Итак, в зависимости от того, какой тип оболочки вы запустили, читаются разные наборы файлов запуска. Из man bash :

   When  bash is invoked as an interactive login shell, or as a non-inter‐
   active shell with the --login option, it first reads and executes  com‐
   mands  from  the file /etc/profile, if that file exists.  After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  The --noprofile option may be  used  when  the
   shell is started to inhibit this behavior.

Другими словами, ~ / .bashrc игнорируется оболочками входа в систему.Поскольку вы используете параметр -i для sudo , файлы запуска для оболочки входа пользователя читаются (из man sudo ):

 -i, --login
             Run the shell specified by the target user's password data‐
             base entry as a login shell.  This means that login-specific
             resource files such as .profile or .login will be read by the
             shell. 

Итак , вы можете

  1. вместо этого определить функцию в пользовательском ~ / .profile или ~ / .bash_profile . Имейте в виду, что ~ / .profile игнорируется, если существует ~ / .bash_profile . Также имейте в виду, что ~ / .bash_profile специфичен для bash, поэтому я бы использовал вместо него .profile , просто убедитесь, что ~ / .bash_profile не существует .

  2. Источник ~ / .nvm / nvm.sh из ~ / .profile .

6
27.01.2020, 20:47

@terdon уже добавил несколько хороших деталей по этому поводу, поэтому я не буду повторять это здесь. Повторяю, причина проблемы, скорее всего, кроется в несколько странном поведении bash при вызове в качестве оболочки входа в систему, поскольку он не создает автоматически .bashrc и вместо этого ищет только ~ / .bash_profile , ~ / .bash_login или ~ / .profile .

Обычно в один из этих файлов профиля добавляют код для получения .bashrc . По умолчанию у меня есть следующий код в ~ / .profile :

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

Update

Из комментариев ниже я думаю, что лучшим решением, вероятно, является удаление [-z "$ PS1 "] && вернуть строку из .bashrc и оставить все остальное как есть.

4
27.01.2020, 20:47
sudo -Hu webconfig bash -c '. ~/.nvm/nvm.sh && nvm'
1
27.01.2020, 20:47

Теги

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