Как ввести пароль при оценке блока кода в Emacs-режиме?
У меня есть блок кода оболочки в файле Org. И в этом есть команда "sudo". Поэтому мне нужно попросить ввести пароль. Но когда я оцениваю это, он просто возвращает ошибку для команды "sudo". Есть ли способ сделать оценку интерактивной?
2 ответа
Да, добавив соответствующие аргументы заголовка к #+BEGIN_SRC
линия:
#+BEGIN_SRC sh :dir /sudo::
apt-get update
#+END_SRC
Источник: Запуск sudo в #+begin_src sh не может получить tty и askpass в списке рассылки emacs-orgmode.
Пояснение: :dir
аргумент
указывает каталог по умолчанию во время выполнения блока кода. Если он отсутствует, то используется каталог, связанный с текущим буфером.
Мимоходом /sudo::
в качестве значения для :dir
мы используем синтаксис TRAMP для доступа к файлам или каталогам с привилегиями суперпользователя. Обратите внимание, что в приведенном выше примере мы не указываем каталог для использования после ::
, В этом случае, /root
будет использоваться по умолчанию. Итак, по сути, то, что мы говорим Орг Бабел, это "Доступ /root
как корень и использовать это местоположение в качестве каталога по умолчанию при выполнении этого кода ".
Вы можете указать другой каталог для использования, изменив /sudo::
в
/sudo::/path/to/dir
РЕДАКТИРОВАТЬ
Если вам нужны некоторые команды в блоке кода для запуска без привилегий суперпользователя, вы можете сделать это, поставив
sudo -u <username>
перед ними (замена <username>
с именем пользователя обычного пользователя). В целях иллюстрации, скажем, ваше имя пользователя enchanter
, и вы хотите, чтобы любые команды в вашем блоке кода, которые не требуют привилегий суперпользователя, выполнялись как ваш собственный пользователь. В этом случае вам нужно будет поставить перед каждой из этих команд префикс
sudo -u enchanter
Вы можете проверить, что это работает, используя whoami
(который печатает имя пользователя, который в данный момент "активен"). добавлять
#+BEGIN_SRC sh :dir /sudo::
whoami
sudo -u enchanter whoami
whoami
#+END_SRC
на ваш org-mode
подать и оценить его. Выход будет:
#+RESULTS:
| root |
| enchanter |
| root |
кредиты
- Этот ответ на AskUbuntu
- Этот ответ на SuperUser
Я уверен, что в StackExchange/ Internet есть другие посты, посвященные проблеме запуска команд от имени другого пользователя, но я перестал искать после того, как нашел эти...
Ответ @itsjeyd хорош, когда у вас есть большинство команд для запуска в качестве SUDO.
Но когда у вас есть только небольшая часть команд для запуска в качестве SUDO, вы должны кодировать много sudo -u <username>
и вы должны передать имя пользователя как переменную, если вы хотите, чтобы этот блок мог запускаться пользователями.
Для этого случая у меня есть решение использовать echo <password> | sudo -S <your command>
Вот пример:
#+BEGIN_SRC sh :var PASSWORD=(read-passwd "Sudo Password: ")
# some normal commands here and there
# run sudo
echo ${PASSWORD} | sudo -S <your command>
# more normal commands
#+END_SRC