Comando não encontrado quando executado com sudo bash

Comando não encontrado quando executado com sudo bash

Eu ssh na minha máquina e então, para executar alguns comandos, preciso sudo bashprimeiro.

Em uma sessão de terminal interativo, se eu fizer isso:

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

as coisas funcionam. Mas se eu precisar fazer isso em uma linha:

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

as coisas param de funcionar. Por que isso está acontecendo e o que mais preciso fazer no segundo cenário para poder executá-lo como o primeiro?

Responder1

Ao ligar, sudo bashvocê executa uma nova instância do bash com user root environment. Mas se você ligar sudo bash -c "whoami; which bundle"o ambiente permanece como para o seu usuário. Se você não tem intenção de fazer isso, você pode modificar a última chamada pelas sudoopções-i

-eu,--Conecte-se

Execute o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login. Isso significa que arquivos de recursos específicos de login, como.perfilou.Conecte-seserá lido pelo shell. Se um comando for especificado, ele será passado ao shell para execução através do shell-copção. Se nenhum comando for especificado, um shell interativo será executado. sudotenta mudar para o diretório inicial desse usuário antes de executar o shell. O comando é executado em um ambiente semelhante àquele que um usuário receberia no login.Ambiente de comandoseção nosudoers(5) o manual documenta como a opção -i afeta o ambiente no qual um comando é executado quando a política sudoers está em uso.

informação relacionada