使用 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

-我,- 登录

运行由目标用户的密码数据库条目指定的 shell 作为登录 shell。这意味着登录特定的资源文件,例如。轮廓或者。登录将被 shell 读取。如果指定了命令,则该命令将通过 shell 的-C选项。如果未指定命令,则执行交互式 shell。 须藤在运行 shell 之前尝试更改到该用户的主目录。该命令在类似于用户登录时收到的环境中运行。命令环境部分中的sudoers(5) 手册记录了使用 sudoers 策略时 -i 选项如何影响命令运行的环境。

相关内容