Команда не найдена при запуске с sudo bash

Команда не найдена при запуске с sudo bash

Я подключаюсь к своей машине по ssh, а затем, чтобы выполнить некоторые команды, мне нужно sudo bashсначала .

Если в интерактивном терминальном сеансе я сделаю следующее:

[vagrant@33 ~]$ sudo bash
[root@33 vagrant]# which bundle
/opt/upnxt/rbenv-0.4.0-7/shims/bundle

все работает. Но если мне нужно сделать это в одну строку:

[vagrant@33 ~]$ sudo bash -c "whoami; which bundle"
root
which: no bundle in (/sbin:/bin:/usr/sbin:/usr/bin)

вещи перестают работать. Почему это происходит и что мне еще нужно сделать со вторым сценарием, чтобы запустить его так же, как первый?

решение1

Когда вы вызываете, sudo bashвы запускаете новый экземпляр bash с user root environment. Но если вы вызываете, sudo bash -c "whoami; which bundle"среда остается такой же, как и для вашего пользователя. Если вы не собираетесь этого делать, вы можете изменить последний вызов с помощью sudoопций-i

,--авторизоваться

Запустите оболочку, указанную в записи базы данных паролей целевого пользователя, как оболочку входа. Это означает, что файлы ресурсов, специфичные для входа, такие как.профильили.авторизоватьсябудет прочитана оболочкой. Если указана команда, она передается оболочке для выполнения через ееопция. Если команда не указана, выполняется интерактивная оболочка. судопытается перейти в домашний каталог этого пользователя перед запуском оболочки. Команда запускается в среде, похожей на ту, которую пользователь получит при входе в систему.Командная средараздел вsudoers(5) В руководстве описывается, как параметр -i влияет на среду, в которой выполняется команда, когда используется политика sudoers.

Связанный контент