
Eu ssh na minha máquina e então, para executar alguns comandos, preciso sudo bash
primeiro.
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 bash
você 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 sudo
opçõ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.