Por lo general, uname
con sus diversas opciones le dirá en qué entorno se está ejecutando:
pax> uname -a
CYGWIN_NT-5.1 IBM-L3F3936 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin
pax> uname -s
CYGWIN_NT-5.1
Y, de acuerdo con lo muy útil schot
(en los comentarios), uname -s
da Darwin
para OSX y Linux
para Linux, mientras que mi Cygwin da CYGWIN_NT-5.1
. Pero es posible que tenga que experimentar con todo tipo de versiones diferentes.
Entonces, el bash
código para hacer tal verificación estaría en la línea de:
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) machine=Linux;;
Darwin*) machine=Mac;;
CYGWIN*) machine=Cygwin;;
MINGW*) machine=MinGw;;
*) machine="UNKNOWN:${unameOut}"
esac
echo ${machine}
Tenga en cuenta que estoy asumiendo aquí que en realidad está ejecutando dentro de CygWin (el bash
caparazón), por lo que las rutas ya deberían estar configuradas correctamente. Como señala un comentarista, puede ejecutar el bash
programa, pasando el script, por cmd
sí mismo y esto puede provocar que las rutas no se configuren según sea necesario.
Si usted está haciendo eso, es su responsabilidad de asegurar las correctas ejecutables (es decir, los CygWin) están siendo llamados, posiblemente mediante la modificación de la ruta de antemano o especificando en detalle los sitios ejecutables (por ejemplo, /c/cygwin/bin/uname
).
MINGW32_NT-6.1
. Además, no hay/cygdrive
prefijo, solo/c
paraC:
.How can a shell/bash script detect ...
y la otra sí.uname -s
termina llamando a lo que seauname
primero en su ruta actual, que en mi sistema resulta ser la versión instalada con lageda
que devuelve el textoWindowsNT
. Sin embargo, también podría ser la versión MinGW como se describió anteriormente. Una detección confiable para cygwin no debe depender de que la ruta se establezca adecuadamente, IMO. Por lo tanto,$(uname -s)
debe cambiarse$(/bin/uname -s)
para detectar cygwin.