Execute o comando sudo no diretório

5

Possíveis soluções podem ser:

  1. Iniciando a sessão interativa.

    sudo -s <<< "cd dir ; command"
    

    ou

    sudo /bin/bash -c "cd dir ; command"
    

    Mas eu não tenho / bin / bash / bin / sh / bin / su ou outras permissões sudoer

  2. Alterando o diretório antes que o sudo seja feito.

    cd dir ; sudo command
    

    Mas não tenho permissão para entrar no diretório

  3. Eu preciso de um caso geral pwd set (como Popen cwd), então abaixo não é a resposta que eu posso usar:

    sudo command /path/to/file
    

O que eu estou tentando escrever é python wrapper Popen com sudo = opção True / False, e atualmente estou tentando de alguma forma obter o parâmetro cwd para trabalhar.

    
por Andrew Onischuk 27.11.2014 / 13:26

2 respostas

3

Não tenho certeza do que é a imagem maior, mas sua abordagem deve ser executar o comando com em um arquivo no diretório. Por exemplo. Se você quiser executar grep regex file onde file está em /root , então você deve abordá-lo da seguinte forma:

$ sudo grep regex /root/file

E não :

$ sudo 'cd /root; grep regex file'
sudo: cd /root; grep regex file: command not found

Por que essa saída? Bem, é a sintaxe do shell e o sudo não está executando o comando em outro shell interativo.

Outra abordagem seria alterar a variável de ambiente PWD , desta forma:

$ sudo -i PWD=/root grep regex file
    
por gertvdijk 27.11.2014 / 13:40
0

Para mim, uma combinação de sudo e screen funcionou:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Este comando primeiro muda para o usuário vagrant . Então, como vagrant altera o diretório para /vagrant e executa npm install .

    
por czerasz 06.11.2015 / 16:33