Comando não encontrado quando executado com o sudo bash

1

Eu ssh na minha máquina e, em seguida, para executar alguns comandos, preciso sudo bash primeiro.

Em uma sessão de terminal interativa, 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 eu preciso fazer no segundo cenário para poder executá-lo como o primeiro?

    
por linkyndy 17.11.2014 / 13:51

1 resposta

0

Quando você chamar sudo bash , execute a nova instância do bash com user root environment . Mas se você chamar sudo bash -c "whoami; which bundle" , o ambiente permanecerá como para seu usuário. Se você não tem intenção de fazer isso, você pode modificar a última chamada por sudo options -i

-i, --login

Run the shell specified by the target user's password database entry as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The command is run with an environment similar to the one a user would receive at log in. The Command Environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.

    
por 17.11.2014 / 14:00

Tags