zsh=/bin/zsh
sh -c "echo $zsh >> /etc/shells"
sh: /etc/shells: Permission denied
OK, tudo bem. E se eu adicionar sudo
, funciona. Multar.
zsh=/bin/zsh
sudo sh -c "echo $zsh >> /etc/shells"
Mas se eu usar open
(para adicionar /bin/zsh
manualmente /etc/shells
), mesmo que eu já use sudo
, tentar editar o arquivo abre uma janela de diálogo que diz que não posso editá-lo:
sudo sh -c 'open /etc/shells'
Você não possui o arquivo “shells” e não tem permissão para escrever nele.
Você pode duplicar este documento e editar a duplicata. Somente a duplicata incluirá suas alterações.
Por que é que? O que há de errado com o sudo sh -c 'open /etc/shells'
comando?
O
open
comando de comando do macOS não iniciará o editor sozinho. Em vez disso, ele solicita que o macOS Launch Services faça isso.O componente Launch Services da sua sessão de login é executado como sua conta de usuário normal e, portanto, não pode iniciar o editor com privilégios de root. Usar
sudo
para que oopen
comando faça a solicitação com privilégios de root não altera esse fato.Não parece haver uma maneira de adicionar um atributo que diga efetivamente "por favor, inicie o aplicativo que abrirá este arquivo como
root
" à solicitação do Launch Services e, mesmo que fosse, parece que o Launch Services não teria o capacidade de executar coisas como root de qualquer maneira.O
sudoedit
comando (man sudoedit
) resolve esse problema.Primeiro, configure
sudoedit
:No seu
~/.bashrc
, adicione:Então
source ~/.bashrc
.Isso conclui
sudoedit
a configuração.Então você pode
sudoedit /etc/shells
.root
,sudoedit
faz uma cópia temporária do arquivo a ser editado.$USER
, invoca$VISUAL
no ambiente GUI,$EDITOR
em ambiente não GUI, no arquivo temporário.root
, copia o arquivo temporário de volta para o arquivo a ser editado, se o editor tiver êxito.Não consegui encontrar nada na página de manual explicando esse comportamento, mas acho que está resolvendo quem é o usuário logado graficamente e tentando abrir o arquivo como esse usuário, mesmo quando ele está envolvido na camada de execução do sudo. Ou seja, não está realmente tentando abrir o arquivo como usuário root.
A execução de comandos gráficos como sudo é fortemente desencorajada, então acho que esse tipo de comportamento está impedindo você de fazer isso intencionalmente.
Este tópico pode ajudar a esclarecer algumas das razões para isso.