Sudoedit Vim forçar gravação (atualização) sem sair

4

Estou fazendo alguns scripts com o Vim e acabei de começar a usar sudoedit .

O problema é que, quando eu :w ele grava no arquivo temporário, qualquer teste do script não pode acontecer a menos que eu saia do editor.

Como posso forçar uma atualização do original ou estou perdendo o ponto de sudoedit ?

    
por Ben 16.09.2013 / 13:53

2 respostas

10

sudoedit permite que você edite um arquivo com um editor em execução no seu próprio ID de usuário. Ele copia o arquivo para um arquivo temporário no qual seu editor pode gravar. Assim que o editor é fechado, o arquivo editado é copiado de volta.

Não há possibilidade integrada de gravar automaticamente as alterações enquanto o editor ainda está em execução.

Então você precisa de

  • execute o editor no outro ID de usuário (por exemplo, sudo vi /file/to/edit )
  • copie o arquivo manualmente de volta em um shell (separado) ( sudo cp /tmp/... /file/to/edit ) ou de dentro do vim :!sudo cp % /file/to/edit . A partir do vim você também pode iniciar um shell com :sh ou colocar o vim em segundo plano com Ctrl + Z e restaurá-lo com fg .
  • use link
  • crie sua própria versão de sudoedit , que grava as alterações de volta assim que os arquivos temporários forem alterados. Isso deve ser facilmente possível com alguns scripts. O Inotify pode ajudá-lo a detectar alterações (veja, por exemplo, Pode um script bash ser ligado a um arquivo? )
por 16.09.2013 / 14:39
5

Você está perdendo o ponto de sudoedit, mas o manual não explica isso, então não se preocupe.

A maioria dos editores tem escudos de shell, por exemplo, :shell no vim, o que permitiria que você ganhasse um shell de root, mesmo que você não tenha essa permissão sob o sudo. Isso é chamado de "escalação de privilégios" e é uma Coisa Ruim.

O comando sudoedit faz o equivalente a:

# cp source-file /tmp/some-temporary-name
$ ${EDITOR} /tmp/some-temporary-name
# cp /tmp/some-temporary-name source-file
# rm /tmp/some-temporary-name

Observe que o editor é executado como você, e não como root, por isso você não pode usar o editor para escalonamento de privilégios.

Se você tem direitos de sudo muito permissivos (como é frequentemente o caso em máquinas de usuário único, dependendo da distribuição), você pode

$ sudo vim source-file

para obter o comportamento desejado.

    
por 16.09.2013 / 14:46

Tags