Énoncé du problème: Quelle est la façon la plus élégante et la plus robuste de tester si la mintty
bash
session Cygwin est "Exécuter en tant qu'administrateur"?
Pourquoi, plus précisément? J'ai généralement plusieurs mintty
terminaux ouverts lorsque j'utilise Windows ( mintty
n'a pas d'onglets). Le plus gênant, c'est quand j'ai besoin de trouver une fenêtre de terminal que j'ai démarrée en cliquant avec le bouton droit sur "Exécuter en tant qu'administrateur" lorsque, par exemple, je veux exécuter ping
ou une autre procédure unique. Je voudrais indiquer visuellement la «exécution en tant qu'administrateur» de la session de terminal (en changeant la bash
variable d'invite du shell PS1
dans mon fichier de démarrage ~/.bashrc
).
Quelques solutions potentielles rapides:
- Je peux comparer la valeur de certaines variables environnementales. En regardant rapidement la
env
sortie, il existe de nombreuses différences. Il est cependant difficile de dire lequel est le plus fiable en termes de portabilité vers une autre machine Windows (exécutant peut-être une version différente de Windows). id
,id -Gn
affiche plus spécifiquement différents groupes s’ils sont exécutés en tant qu’administrateur. Dans ma machine Windows 7, j'ai des groupesAdministrators
etroot
ajoutés à la liste. Encore une fois, je ne suis pas sûr que ce soit portable.- Je pourrais essayer d'écrire un fichier dans un emplacement qui échouerait en tant qu'utilisateur normal. Mais je ne veux pas écrire de fichiers dans des endroits étranges - cela pourrait dans certains scénarios imaginés être potentiellement destructeur (par exemple, un support de stockage défaillant) et cela semble tout à fait inélégant à mon goût.
- Exécution d'un programme Windows qui indiquera par état de retour ou sortie si la commande est exécutée "en tant qu'administrateur". Le mieux serait certains avec un but analogue à celui de la
id(1)
commande UNIX (mais existant nativement dans Windows - ou Cygwin, mais sans traduction trop poussée des concepts du système Windows en concepts émulés POSIX).
Des suggestions meilleures ou plus élégantes? Peut-être que cygwin fournit un utilitaire de commande dédié à cet effet?
Mise à jour: doublon de 97% de /programming/4051883/batch-script-how-to-check-for-admin-rights/ - la différence est juste ici en utilisant bash
au lieu de (IMHO bizarre et archaïque) Windows cmd.exe
. Veuillez vérifier les réponses et les commentaires là-bas.
mintty
cela 1. s'exécute en tant qu'administrateur, 2. utilise un fichier de configuration différent avec des couleurs différentes paramètres et 3. utilise une autre icône. Si vous décrivez au grand public comment créer ceci, je vous donnerai un upvote (à moins que vous ne disiez dans votre réponse que cela ne peut pas être fait dans un script :-).Foo
groupe d'utilisateurs si vous le souhaitez.sudo
ce qui est requis même si vous exécutez en tant qu'utilisateur root.Réponses:
Je viens d'écrire cette fonction pour la même raison. Je ne sais jamais quel shell a des privilèges d'administrateur.
Il s'est adapté de cette réponse /programming//a/11995662/307968 pour le shell cmd de windows. Net Session renvoie l'état 0 si vous êtes administrateur.
Maintenant, je dois juste changer mon invite, ou peut-être la couleur de la barre de titre ....
la source
La réponse définitive à cette question provient de la liste de diffusion Cygwin . Un processus s'exécute avec des droits d'administrateur si l'utilisateur qui l'a démarré fait partie du groupe 544 (Administrateurs). D'après le commentaire ci-dessous de Cromax, il semble que le groupe 114 (compte local et membre du groupe Administrateur) soit également parfois présent. Le test pour ces deux groupes est
Par exemple,
Dans le passé, vous deviez également vérifier le groupe 0, le groupe racine dans / etc / group. Mais / etc / group n'est plus installé dans Cygwin, et devrait généralement être supprimé s'il est présent, il n'est donc plus recommandé de vérifier également le groupe 0. Juste le groupe 544.
la source
id
la sortie de, à savoir 114 (compte local et membre du groupe Administrateur). Donc l'expression régulière devrait être mise à jour pour:id -G | grep -qE '\<(114|544)\>' && echo admin || echo user
J'utilise la valeur de retour du programme Windows
at
. J'ai également recréé la fonctionnalité du caractère spécial PROMPTING\$
.la source
id
commande UNIX dans Windows, j'accepte cela comme une réponse correcte. Au moins l'exécution de laat
commande sans aucun argument ne semble pas avoir d'effets secondaires. Je vais.bashrc
désormais utiliser cette méthode dans mon dossier! Merci pour le hack.id -G | grep -qE '\<(544|0)\>'
ne semblait pas fonctionner pour moi, car ma sortie n'avait ni <> ni 544 même lorsqu'elle était élevée. Cependant, étant donné que l'élévation est requise pour écrire%WINDIR%\system32
, j'ai utilisé cela pour tester l'élévation avec une fonction shell:Lorsqu'il est appliqué à l'excellente idée de Steven d'un caractère de hachage rouge:
la source
Faites quelque chose que seul l'administrateur peut faire et testez le succès ou l'échec: -
ou
ou
ou
la source
Dans Msys sur Windows, essayez ceci (j'ai trouvé que la réponse acceptée ne fonctionnait pas dans Msys)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Cela repose sur le code retour de
at
zéro uniquement lors de l'exécution en tant qu'administrateur.la source