Debido a que no hay un comando sudo en Cygwin , los scripts que quiero ejecutar fallan
./install.sh: line N: sudo: command not found
¿Cuál es la forma estándar de evitar esto? ¿Edición de los scripts para eliminar sudo
? ¿Tienes alguna sudo
herramienta similar para Windows?
windows
command-line
cygwin
Jason Sundram
fuente
fuente
Respuestas:
Escribí el (bastante simple) TOUACExt de SUDO para CygWin , una concha de automatización de secuencia de comandos pre-beta que se acerca al comportamiento de los clásicos
sudo
para Linux:La instalación requiere copiar los cuatro
.sh
scripts en algún directorio de ruta, crear un alias y solo algunos pasos más detallados en el hilo.Los resultados : escribe uno
sudo YourCommand
y obtiene el resultado, sin tener que preocuparse por el resto del proceso.fuente
Una forma es crear un comando falso "sudo" con el siguiente contenido:
Esto permitirá
install.sh
que continúe, porque se encuentra sudo.Esto no eleva los privilegios como lo hace el sudo real. Si realmente necesita privilegios elevados, inicie cygwin shell desde una cuenta con privilegios administrativos (XP) o haga clic en cygwin.bat y "ejecutar como administrador" (Vista, Win7)
fuente
bash
: ¿Por qué funciona esto? La página de manual no dice nada sobre$@
hacer algosudo
parecido. En cambio, son solo todos los argumentos del guión. ¿Y las citas a su alrededor no serían superfluas en ese caso? De lo contrario, si lo hicierassudo foo bar
, intenta ejecutarlo"foo bar"
como un solo comando que probablemente no exista dado el miedo irracional a los espacios en sistemas similares a UNIX."$@"
(con comillas dobles) funciona de manera diferente a"$*"
: se expande a una palabra separada para cada variable de posición. Ejemplo: Si$1 == "foo bar"
y$2 == "baz"
, entonces"$@"
es"foo bar" baz
- una palabra para cada parámetro (a diferencia"$*"
, lo que resulta en"foo bar baz"
una sola palabra). Consulte el manual de labash
sección Parámetros , subsección Parámetros especiales . El resultado final del guión de Peon es que ejecuta sus argumentos exactamente como fueron pasados.sudo
viene la parte? El fragmento anterior no hace nada de forma remota en esa dirección, ¿verdad?sudo
aumentaría los privilegios de mortal aroot
antes de ejecutar el comando. En Cygwin, no existe tal cosa, por lo que el script falso de Peon (que se supone que debes nombrarsudo
) simplemente ejecuta el comando directamente sin cambiar sus privilegios. (Esto significa que es posible que deba ejecutar./install.sh
como Administrador)runas
debería funcionar, no depende de UAC y solicita una contraseña por sí misma. Estaba confundido por qué el guión en la respuesta aparentemente no hizo lo que el nombre implicaba, lo cual asumí que era el objetivo. Perdón por mi estupidez ;-)Encontré la respuesta en la lista de correo de cygwin . Para ejecutar
command
con privilegios elevados en Cygwin, preceda el comando decygstart --action=runas
esta manera:Esto abrirá un cuadro de diálogo de Windows solicitando la contraseña de administrador y ejecutará el comando si se ingresa la contraseña correcta.
Esto es fácil de escribir, siempre y cuando
~/bin
esté en su camino:Probado en Windows 8 de 64 bits.
fuente
cygstart
método es que solo funciona para comandos / programas de Windows. No puedes hacersudo ls
. SUDO para CygWin es ordenado, pero aún le falta un buensudo
dominio.sudo ls
en Cygwin?sudo
CygWin para ejecutar cualquier comando de Windows o CygWin. Es muy útil para mí. Pero el método más práctico que he encontrado es este derivador de scripts para SUDO para CygWin he desarrollado: superuser.com/questions/741345/... (todavía en fase beta, pero parece que funciona). Con él puedes ordenar cómodamente cosas comosudo net start vncserver
./bin
y/usr/bin
de laPATH
. Invoca con éxito emacs:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
pero emacs no puede encontrar,ls
por ejemploM-x dired
, incluso después de restaurar interactivamente la RUTA usando(setenv ...)
. ¿Hay un problema de rutas confiables aquí?Sobre la base de la respuesta de dotancohen, estoy usando un alias:
Funciona como un encanto para programas externos (sin embargo, no incorporados en shell):
fuente
Sudo (Elevate) para Windows ™
Hago mucho trabajo en la línea de comandos en Windows ™.
En el propio Cygwin, creo que puede ejecutar un comando raíz con
su -c /the/cmd
respecto a sudo en el sistema de archivos de Windows ™ que eleva los permisos del usuario desde la línea de comandos. Si usted es un administrador, esto funcionará muy bien para usted. De lo contrario, use runas y obtenga el pase de administrador;).Ahora no puedo recordar de dónde obtuvimos este código, pero aquí está. Espero que ayude.
Por cierto, el paquete que utilizamos para compilar esto fue
gcc-mingw32
.fuente
Una ligera mejora en el script de sudo falso de Peon :
Este script silenciosamente descarta cualquier opción pasada a sudo y ejecuta el comando (sin realmente elevar los privilegios). Descartar las opciones mejora un poco la compatibilidad. Un script de envoltura más completo debería analizar las opciones de la misma manera que sudo.
En lugar de tratar de reemplazar sudo con un contenedor que lo haga
cygstart --action=runas "$@"
, simplemente use este simple contenedor falso de sudo y ejecute el script de instalación (o lo que esté intentando ejecutar que use sudo) con privilegios elevados.fuente