sudo -i permite apenas um argumento

2

Isso é normal?

> sudo -u misc -i "ls"
note test tmp
> sudo -u misc -i "ls ~"
-bash: ls ~: command not found
> sudo -u misc -i "ls ~"
-bash: ls ~: command not found
> sudo -u misc -i "foo=bar"
[misc]

Qualquer coisa que tenha um espaço parece ser interpretada como um único comando, que não é reconhecido. Ainda mais estranho, configurar qualquer variável de ambiente me coloca na conta do outro usuário. Como posso executar esses comandos conforme o esperado?

    
por mahemoff 03.01.2012 / 23:01

2 respostas

4

O comando e os argumentos passados para sudo não devem ser colocados entre aspas, então você pode tentar

sudo -u misc -i ls -l

mas

sudo -u misc -i ls ~

não deve listar o conteúdo do diretório base de misc , mas sua casa, porque o caractere ~ foi expandido antes passado para sudo . Você poderia tentar evitar isso usando

sudo -u misc -i ls '~'

mas isso novamente não funciona, porque sudo não invoca um shell para executar seu comando, então ~ não tem significado algum em um shell.

Finalmente, a solução poderia ser

sudo -u misc -i bash -c 'ls ~'
    
por enzotib 03.01.2012 / 23:15
0

Funciona para mim, mas sem as aspas:

  

sudo -u teste -i ls -lah ~

    
por lafdez 03.01.2012 / 23:14