Iniciando editores de texto do terminal como root

0

Sistema: Linux Mint 18.1 Canela de 64 bits .

Bash: versão empacotada 4.3.46(1)-release .

Objetivo: Para definir aliases de Bash para iniciar vários CLI e texto da GUI editores ao abrir um arquivo no modo root de gnome-terminal emulador.

Progresso: Por exemplo, os seguintes aliases funcionam conforme o esperado:

Para CLI :

alias sunano='sudo nano'

Para GUI :

alias suxed='sudo xed'

Ambos abrem qualquer arquivo como root .

Problema: tenho um problema com gksudo em conjunto com < href="https://en.wikipedia.org/wiki/Sublime_Text"> sublime-text :

alias susubl='gksudo /opt/sublime_text/sublime_text'

Às vezes, funciona. Apenas não faz nada na maior parte do tempo.

Como eu depuro uma coisa dessas com comportamento inconsistente. Não produz nada. Nenhuma mensagem de erro ou similar.

    
por Vlastimil 05.04.2017 / 14:22

2 respostas

4

Você não deve executar um editor como root, a menos que seja absolutamente necessário, você deve definir sudoedit apropriadamente. Então você pode fazer

SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit yourfile

sudoedit verificará que você tem permissão para fazer isso, fazer uma cópia do arquivo que você pode editar com a mudança de IDs, iniciar seu editor e, quando o editor sair, copiar o arquivo de volta, se tiver sido mudou.

Eu sugeriria uma função em vez de um alias:

function susubl {
    export SUDO_EDITOR="/opt/sublime_text/sublime_text -w"
    sudoedit "$@"
}

embora, como Jeff Schaller apontou, você pode usar env para colocar isso em um alias e evite mudar o ambiente do seu shell:

alias susubl='env SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit'

A opção -w garante que a invocação do Sublime Text espere até que os arquivos sejam fechados antes de retornar e permitir que sudoedit copie os arquivos de volta.

    
por 05.04.2017 / 14:46
0

Expandindo . com / a / 356119/126755 "> responder , apenas preenchendo uma lacuna realmente

  1. Descubra em qual caminho seu editor está localizado, por exemplo:

    $ which nano
    /usr/local/bin/nano
    

    Como você pode ver, eu uso o nano compilado, não a versão empacotada; não importa, isso pode mudar de system / config para outro system / config.

  2. Os editores de texto CLI , como vi ou nano , parecem não ter o aguarde opção, por isso para o meu nano eu posso escrever uma função como esta:

    sunano()
    {
        export SUDO_EDITOR='/usr/local/bin/nano'
        sudoedit "$@"
    }
    
  3. Pelo contrário, os editores de texto GUI como o xed do Linux Mint, programas gratuitos como o Visual Studio Code ( code ), ou programas pagos como o Sublime Text ( subl ) todos parecem ter a opção wait , e você tem que usá-lo para evitar o problema descrito na minha pergunta, você pode use algo semelhante a estas funções:

    suxed()
    {
        export SUDO_EDITOR='/usr/bin/xed --wait'
        sudoedit "$@"
    }
    
    sucode()
    {
        export SUDO_EDITOR='/usr/bin/code --wait'
        sudoedit "$@"
    }
    
    susubl()
    {
        export SUDO_EDITOR='/opt/sublime_text/sublime_text --wait'
        sudoedit "$@"
    }
    

O que a opção --wait efetivamente faz é que o editor esperará no terminal até você fechá-lo, aguardando assim o fechamento do editor, permitindo que outras ações sejam planejadas e executadas no fechamento do editor, neste caso para salve as alterações sudoedit . Normalmente, apenas liberaria o terminal e você receberia um novo prompt.

Imagine outro uso útil para isso:

code /home/vlastimil/.bash_aliases --wait && source /home/vlastimil/.bash_aliases

Espero que, com este exemplo, eu me torne mais claro.

    
por 07.10.2018 / 14:16