Problemas com o sudo dentro do shell script

0

Eu quero fazer um shell script para rodar o VI com o sudo se eu tentar editar um arquivo que eu não tenho permissões de escrita e para isso eu criei um alias

    alias vi=my_script.sh

    #!/bin/bash
    file=$1

    if [ -r $file ]
    then
       /usr/bin/vi $file
    else
       sudo /usr/bin/vi $file
    fi        

No entanto, não importa o que, quando tentar editar, digamos / etc / hosts, ainda não tenho permissão para editá-lo.

O que estou fazendo de errado?

    
por Psicofrenia 27.12.2013 / 12:48

2 respostas

2

Eu modifiquei seu script para funcionar

#!/bin/bash
file=$1
wown=$(/bin/ls -alF $file | awk '{print $3}')

if [ -r $file ] && [ $wown == $USER ]
then
    /usr/bin/vi $file
else
    sudo /usr/bin/vi $file
fi

E se você quiser acessá-lo diretamente de qualquer lugar, pode colocá-lo no PATH (como ~/bin/ ) em vez de criar um alias para ele.

    
por souravc 27.12.2013 / 14:04
2

Ok, supondo que o bit em cinza seja seu my_script.sh , existem alguns problemas. Primeiro, o alias precisa ser definido no seu .bashrc não no arquivo. Mais detalhes estão aqui .

Agora, no script, o -r test verifica se o arquivo é legível, não se for editável. Você provavelmente leu, mas não escreveu permissões. Então você deveria tentar

#! /bin/bash

if test -w $1 
then
   /usr/bin/vi $1
else
   sudo /usr/bin/vi $1
fi

Isso deve funcionar. Uma dica que eu gostaria de acrescentar é que, se você está tendo um problema com um script bash: Cubra-o em instruções echo! Um no início para verificar se abre, um em cada lado da declaração if para ver aonde vai.

    
por Julian Stirling 27.12.2013 / 13:59