Как ввести пароль при оценке блока кода в 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       |

кредиты

Я уверен, что в 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
Другие вопросы по тегам