Declaración del problema: ¿Cuál es la forma más elegante y robusta de probar si la mintty
bash
sesión de Cygwin es "Ejecutar como administrador"?
¿Por qué específicamente? Normalmente tengo varios mintty
terminales abiertos cuando uso Windows ( mintty
no tiene pestañas). Lo más incómodo es cuando necesito encontrar una ventana de terminal que comencé haciendo clic derecho en "Ejecutar como administrador" cuando, por ejemplo, quiero ejecutar ping
u otro procedimiento de una sola vez. Me gustaría indicar visualmente la "ejecución como administrador" de la sesión de terminal visualmente (cambiando la bash
variable de solicitud de shell PS1
en mi archivo de inicio ~/.bashrc
).
Algunas soluciones potenciales rápidas:
- Puedo comparar el valor de algunas variables ambientales. Por un vistazo rápido de
env
salida, hay muchas diferencias. Sin embargo, es difícil saber cuál es el más confiable en términos de portabilidad a otra máquina con Windows (tal vez ejecutando una versión diferente de Windows). id
,id -Gn
muestra más específicamente diferentes grupos si se ejecuta como administrador. En mi máquina con Windows 7 tengoAdministrators
yroot
grupos agregados a la lista. Nuevamente, no estoy seguro de si esto es portátil.- Podría intentar escribir un archivo en una ubicación que podría fallar como usuario normal. Pero no quiero escribir ningún archivo en lugares extraños; en algunos escenarios imaginarios, esto podría ser potencialmente destructivo (por ejemplo, medios de almacenamiento defectuosos) y esto parece completamente poco elegante para mi gusto.
- Ejecutando algún programa de Windows que indicará por estado de retorno o salida si el comando se ejecuta "como administrador". Lo mejor sería alguno con un propósito análogo al del
id(1)
comando UNIX (pero existente de forma nativa en Windows o Cygwin, pero sin una traducción demasiado exagerada de los conceptos del sistema de Windows a los conceptos emulados POSIX).
¿Alguna sugerencia mejor o más elegante? ¿Quizás cygwin proporciona una utilidad de comando dedicada para este propósito?
Actualización: 97% duplicado de /programming/4051883/batch-script-how-to-check-for-admin-rights/ - la diferencia está aquí usando en bash
lugar de Windows (extraño y arcaico) cmd.exe
. Verifique las respuestas y comentarios allí.
mintty
que 1. se ejecute como administrador, 2. use un archivo de configuración diferente con un color diferente 3. y utiliza un icono alternativo. Si describe al público en general cómo crear esto, le daré un voto positivo (a menos que diga en su respuesta que no se puede hacer dentro de un script :-).Foo
grupo de usuarios si lo desea.sudo
que es necesario incluso si está ejecutando como usuario root.Respuestas:
Acabo de escribir esta función por la misma razón. Nunca sé qué shell tiene privilegios de administrador.
Se adaptó de esta respuesta /programming//a/11995662/307968 para Windows cmd shell. Net Session devuelve el estado 0 si es administrador.
Ahora solo necesito cambiar mi indicador, o tal vez el color de la barra de título ...
fuente
La respuesta definitiva a esta pregunta proviene de la lista de correo de Cygwin . Se está ejecutando un proceso con derechos de administrador si el usuario que lo inició es parte del grupo 544 (Administradores). También del comentario a continuación de Cromax, parece que el grupo 114 (Cuenta local y miembro del grupo Administrador) también a veces está presente. La prueba para estos dos grupos es
Por ejemplo,
En el pasado, también era necesario verificar el grupo 0, el grupo raíz en / etc / group. Pero / etc / group ya no está instalado en Cygwin y, por lo general, debe eliminarse si está presente, por lo que ya no se recomienda verificar el grupo 0 también. Solo grupo 544.
fuente
id
la salida, es decir, 114 (cuenta local y miembro del grupo Administrador). Por lo tanto, laid -G | grep -qE '\<(114|544)\>' && echo admin || echo user
Yo uso el valor de retorno del programa de Windows
at
. También recreé la funcionalidad del carácter especial PROMPTING\$
.fuente
id
comando UNIX en Windows, acepto esto como una respuesta correcta. Al menos ejecutar unat
comando sin ningún argumento no parece tener ningún efecto secundario. ¡Voy a usar este método en mi.bashrc
archivo de ahora en adelante! Gracias por el hack.id -G | grep -qE '\<(544|0)\>'
no parecía funcionar para mí, ya que mi salida no tenía ni <> ni 544 incluso cuando estaba elevada. Sin embargo, dado que se requiere elevación para escribir%WINDIR%\system32
, lo usé para probar la elevación con una función de shell:Cuando se aplica a la excelente idea de Steven de un personaje de hash rojo:
fuente
Haga algo que solo el administrador pueda hacer y pruebe el éxito o el fracaso:
o
o
o
fuente
En Msys en Windows intente esto (encontré que la respuesta aceptada no funcionaba en Msys)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Esto se basa en el código de retorno de
at
ser cero solo cuando se ejecuta como administrador.fuente