2009-07-24 17 views
1

Voici la situation:Comment puis-je vérifier par programme si une application CYGWIN est installée dans un script SH?

J'écris un script de déploiement SH qui va déployer un site Web avec une commande RSYNC dans CYGWIN. Après l'installation, je veux envoyer un e-mail à l'équipe de développement pour dire qu'un déploiement a été fait avec quelques détails. Je vais utiliser "exim" pour envoyer le mail de CYGWIN. La chose est que, exim n'est que facultatif lors de l'installation de CYGWIN et je voudrais quitter mon script SH s'il n'est pas installé. Une idée pour vérifier dans UNIX (et travailler dans CYGWIN) si une application est installée dans un script?

Merci d'avance!

Répondre

4
# bash script (should also work with sh) 
# someprog must be on the path for type to find it 
if type -p "someprog" 
then 
    echo "it's there" 
else 
    echo "it isn't" 
fi 
+0

Merci, qui avait l'air facile finalement, mais ne savait pas la commande:) – Amadeus45

0

Vous pouvez utiliser la commande 'which'. Il vous renverra l'emplacement du programme ou rien s'il n'est pas présent.

2

Plus précisément pour vérifier 'Exim', exécutez

exim -bV 

Sur mon Cygwin il donne une sortie comme,

Exim version 4.69 #1 built 28-Jan-2008 21:59:08 
Copyright (c) University of Cambridge 2006 
Probably GDBM (native mode) 
Support for: crypteq iconv() PAM OpenSSL Content_Scanning 
Lookups: lsearch wildlsearch nwildlsearch iplsearch dbm dbmnz dnsdb dsearch ldap 
    ldapdn ldapm passwd 
Authenticators: cram_md5 plaintext spa 
Routers: accept dnslookup ipliteral manualroute queryprogram redirect 
Transports: appendfile/maildir/mailstore/mbx autoreply pipe smtp 
Size of off_t: 8 
Configuration file is /etc/exim.conf 

A partir du manuel 'exim' sur 'Exim -bV' Cette option oblige Exim à écrire le numéro de version en cours, compilationCette option permet à Exim d'écrire le numéro de version actuel, compilation

nombre, et la date de compilation du binaire exim à la sortie standard. Il répertorie également la bibliothèque DBM en cours d'utilisation, les modules optionnels (tels que les types de recherche spécifiques), les pilotes inclus dans le binaire et le nom du fichier de configuration d'exécution utilisé.

Dans le cadre de son fonctionnement, -bV demande à Exim de lire et de vérifier la syntaxe de son fichier de configuration . Cependant, ceci est une vérification statique seulement. Il ne peut pas vérifier les valeurs à développer. Par exemple, bien qu'un verbe ACL mal orthographié soit détecté, une erreur dans les arguments du verbe ne l'est pas. Vous ne pouvez pas compter sur -bV seul pour découvrir (par exemple) toutes les fautes de frappe dans la configuration; certains tests réalistes sont nécessaires. Les options -bh et -N fournissent plus d'options de test dynamique.


comparaison avec les type et which chèques.

Le type est une commande intégrée au shell. Il indique comment un nom sera interprété par le shell s'il est utilisé comme commande. L'option -p lui permet de renvoyer le nom du fichier disque qui serait exécuté si la commande était émise.

qui recherches simplement pour un exécutable par le nom donné dans la recherche PATH en utilisant le même algorithme bash.

L'une de ces options retournera true si quelqu'un place un fichier exécutable du même nom dans le chemin. Vous devriez faire plus attention à l'invocation des commandes d'un script, si la sécurité est un problème.

Il peut être prudent de savoir ce que vous utilisez.
Bien sûr, je peux également implémenter un script shell appelé exim qui retournera l'entrée ci-dessus sur -bV; et les choses en désordre en arrière-plan - quel est votre niveau de paranoïa?

0

Pour atténuer les problèmes de sécurité que nik apporté par vous pouvez vérifier l'emplacement de l'exécutable sur une liste attendue des lieux:

case $(type -p someprog) in 

    /usr/bin/someprog \ 
    | /bin/someprog \ 
    | /usr/local/someprog) 

     echo "Valid location";; 
    *) 
     echo "Invalid location";; 
esac