Declaração do problema: Qual é a maneira mais elegante e robusta de testar se a mintty
bash
sessão do Cygwin é "Executar como administrador"?
Por que, especificamente? Normalmente, tenho vários mintty
terminais abertos ao usar o Windows ( mintty
não possui guias). O mais estranho é quando preciso encontrar uma janela de terminal iniciada clicando com o botão direito do mouse em "Executar como administrador" quando, por exemplo, quero executar ping
ou outro procedimento único. Gostaria de indicar visualmente a condição "executar como administrador" da sessão do terminal (alterando a bash
variável de prompt do shell PS1
no meu arquivo de inicialização ~/.bashrc
).
Algumas soluções potenciais rápidas:
- Eu posso comparar o valor de algumas variáveis ambientais. Pela rápida olhada na
env
saída, existem muitas diferenças. No entanto, é difícil dizer qual é o mais confiável em termos de portabilidade para outra máquina Windows (talvez executando uma versão diferente do Windows). id
,id -Gn
mostra mais especificamente grupos diferentes se executado como administrador. Na minha máquina com Windows 7, tenhoAdministrators
eroot
grupos foram adicionados à lista. Mais uma vez, não tenho certeza se isso é portátil.- Eu poderia tentar gravar um arquivo em um local que falharia como usuário normal. Mas não quero gravar nenhum arquivo em lugares estranhos - isso em alguns cenários imaginados pode ser potencialmente destrutivo (por exemplo, falha na mídia de armazenamento) e isso parece totalmente deselegante para o meu gosto.
- Executando algum programa do Windows que indicará por status de retorno ou saída, se o comando for executado "como administrador". O melhor seria alguns com finalidade análoga à do
id(1)
comando UNIX (mas que existe originalmente no Windows - ou Cygwin, mas sem tradução muito buscada dos conceitos de sistema Windows para conceitos emulados POSIX).
Alguma sugestão melhor ou mais elegante? Talvez o cygwin forneça um utilitário de comando dedicado para esse fim?
Atualização: 97% duplicado do /programming/4051883/batch-script-how-to-check-for-admin-rights/ - a diferença está aqui, em bash
vez de usar o Windows (IMHO estranho e arcaico) cmd.exe
. Por favor, verifique as respostas e comentários lá.
mintty
que 1. seja executado como administrador, 2. use arquivo de configuração diferente com cores diferentes configurações e 3. usa um ícone alternativo. Se você descrever ao público em geral como criar isso, eu darei um voto positivo (a menos que você diga na sua resposta que isso não pode ser feito dentro de um script :-).Foo
grupo de usuários, se desejar.sudo
necessário, mesmo se você estiver executando como usuário root.Respostas:
Acabei de escrever esta função pelo mesmo motivo. Eu nunca sei qual shell tem privilégios de administrador.
Foi adaptado desta resposta /programming//a/11995662/307968 para o shell do cmd do windows. Net Session retorna o status 0 se você for administrador.
Agora só preciso alterar meu prompt, ou talvez a cor da barra de título ....
fonte
A resposta definitiva a esta pergunta vem da lista de discussão Cygwin . Um processo está sendo executado com direitos de Administrador se o usuário que o iniciou fizer parte do grupo 544 (Administradores). Também a partir do comentário abaixo por Cromax, parece que o grupo 114 (conta local e membro do grupo Administrador) também está presente às vezes. O teste para esses dois grupos é
Por exemplo,
No passado, você também precisava verificar o grupo 0, o grupo raiz em / etc / group. Mas o / etc / group não está mais instalado no Cygwin e geralmente deve ser removido se estiver presente, portanto, não é mais recomendável verificar também o grupo 0. Apenas o grupo 544.
fonte
id
saída de, nomeadamente 114 (conta local e membro do grupo de administradores). Portanto, o regexp deve ser atualizado para:id -G | grep -qE '\<(114|544)\>' && echo admin || echo user
Eu uso o valor de retorno do programa Windows
at
. Também recriei a funcionalidade do caractere especial PROMPTING\$
.fonte
id
comando UNIX no Windows, aceito isso como uma resposta correta. Pelo menos, executar oat
comando sem argumentos não parece ter efeitos colaterais. Vou usar esse método no meu.bashrc
arquivo a partir de agora! Obrigado pelo hack.id -G | grep -qE '\<(544|0)\>'
pareceu não funcionar para mim, pois minha produção não tinha nem <> nem 544, mesmo quando elevada. No entanto, como a elevação é necessária para a gravação%WINDIR%\system32
, usei isso para testar a elevação com uma função de shell:Quando aplicado à excelente idéia de Steven de um personagem de hash vermelho:
fonte
Faça algo que apenas o administrador possa fazer e teste para obter sucesso ou falhar: -
ou
ou
ou
fonte
No Msys no Windows, tente isso (eu achei a resposta aceita não funcionou no Msys)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Isso depende do código de retorno de
at
zero somente quando executado como administrador.fonte