2010-11-22 31 views
10

Existe-t-il un moyen simple de vérifier si un script s'exécute dans Cygwin? Nous avons un script qui appelle un utilitaire qui s'attend à ce que les chemins passés soient des fenêtres, donc si nous sommes dans Cygwin, nous devons convertir les chemins en chemins Windows.Script Shell détectant l'exécution dans Cygwin

Répondre

15

Vous pouvez utiliser l'utilitaire uname. De uname(1):

-o, --Notices système
impression du système d'exploitation

Exemple Code:

if [ `uname -o` = "Cygwin" ] 
then 
    # Cygwin specific stuff 
else 
    # Other UNIX (Linux, etc.) specific stuff 
fi 
+3

Mais [le uname OS X (1)] (http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/uname. 1.html) (BSD uname) ne supporte pas le drapeau '-o'. – ryandesign

+2

Oui, je ne recommanderais pas d'utiliser '-o' si vous avez besoin d'être super portable, trop de saveurs de * nix ne le reconnaissent pas. Une combinaison de '-s' et' -r' devrait faire l'affaire, et ces drapeaux existent depuis l'aube des temps. –

2

vérifier la sortie de uname utilitaire

+0

+1 'uname -o' est plus spécifique que –

1

En combinant certains des commentaires et la suppression des résultats dans les apostrophes inverses déconseillés:

#!/bin/bash 
OS_NAME=$(uname -s) 
OS_NAME=${OS_NAME:0:6} 

if [[ "$OS_NAME" = "CYGWIN" ]] 
then 
    # Cygwin specific stuff 
else 
    # Other UNIX (Linux, etc.) specific stuff 
fi 
3

Cela fonctionne avec ksh et bash.

#!/bin/ksh 
case "$(uname -s)" in 
    CYGWIN*) echo This is Cygwin ;; 
    *) echo This is not Cygwin ;; 
esac