Eu tenho experimentado usar o terminal para abrir o gedit com qualquer tipo de arquivo que ele seja capaz de usar e não ter o terminal bloqueado até que o arquivo seja fechado OU tenha alguma mensagem de erro na saída do terminal.
Essencialmente uma diferença de:
/dev/null
or
>/dev/null
Isso abre um arquivo de texto através do terminal e não o bloqueia e não mostra nenhuma mensagem de erro.
function gedit {
sudo -H gedit "$@" /dev/null 2>&1 &
clear;
}
Isso não funciona e é o inverso do método acima.
function gedit {
sudo -H gedit "$@" >/dev/null 2>&1 &
clear;
}
Alguma ideia galera?
O problema pode ser algumas coisas, porque você está enviando todos os erros para
/dev/null
, você não poderá ler esses erros.Eu recomendaria mover o
-H
sinalizador antes do comando que você pretende executar com privilégios. Eu acho quesudo
é exigente sobre essas coisas. (ou seja:sudo -H COMMAND_HERE
).É provável que seu shell atual não tenha sido elevado para
sudo
, e você está sendo solicitado a inserir sua senha.Você pode tentar emitir
sleep 0
ouecho
apenas obter o prompt sudo. Se você já digitou sua senha, isso ainda deve funcionar.Ou, se você
gedit
configurou em seusudoers
, você pode remover asudo sleep 0
linha, mas de qualquer forma, você precisa corrigir o-H
sinalizador parasudo
.Para entender o que um comando em uma janela de terminal está fazendo, você precisa começar com a sintaxe básica do shell. O
>
personagem tem uma função muito específica e, portanto, sua presença faz uma diferença fundamental nesse nível.Um ponto fundamental primeiro: adicionar
sudo
indiscriminadamente assim é perigoso e eu recomendo contra isso. É muito fácil esquecer que você está trabalhando comroot
privilégios sesudo
estiver escondido dentro de uma função.Na sua primeira versão:
o
sudo
comando é chamado com a-H
opção e o argumentogedit "$@" /dev/null
onde"$@"
é substituído pela lista de parâmetros passados para a função. Entãogedit
é executado como usuárioroot
com uma lista de arquivos para editar que compreende todos os arquivos fornecidos pelo usuário mais o arquivo/dev/null
. (Se a edição/dev/null
faz algum sentido está além do escopo desta explicação.) O elemento2>&1
não faz nada nesta versão, pois a saída padrão e o erro padrão já vão para o mesmo destino de qualquer maneira. O elemento&
coloca todo o comando em segundo plano para liberar a janela do terminal novamente. Como consequência, no entanto, causarásudo
ougedit
bloqueará se eles tentarem gravar algo na saída padrão ou no erro padrão.Na sua segunda versão:
o
sudo
comando é chamado com a-H
opção e o argumentogedit "$@"
where"$@"
é substituído pela lista de parâmetros passados para a função como antes. Entãogedit
é executado como usuárioroot
com exatamente a lista de arquivos para editar fornecida pelo usuário. O elemento>
redireciona a saída padrão do comando para o arquivo a seguir/dev/null
, descartando-o efetivamente, e o elemento2>&1
redireciona o erro padrão para o mesmo destino. O elemento&
coloca todo o comando em segundo plano como antes, mas como a saída padrão e o erro padrão foram redirecionados desta vez, os programas não serão bloqueados ao escrever lá.Depois de entender essa diferença funcional fundamental, você pode começar a analisar por que cada versão se comporta da maneira que se comporta e como alterar o comportamento que você não gosta. Por exemplo,
sudo
pode tentar solicitar uma senha que entra em conflito com a colocação em segundo plano. Se você quiser se agarrar aosudo
meu conselho, existem maneiras de contornar isso separando as etapas de verificação de senha e execução do programa porsudo
meio das opções-v
e-n
.