2009-07-24 11 views
1

Hier ist die Situation:Wie kann ich programmgesteuert überprüfen, ob eine CYGWIN-App in einem SH-Skript installiert ist?

Ich schreibe ein SH-Deployment-Skript, das eine Website mit einem RSYNC-Befehl in CYGWIN bereitstellen wird. Nach der Installation möchte ich eine E-Mail an das Entwicklungsteam senden, um zu sagen, dass eine Bereitstellung mit einigen Details erfolgt ist. Ich werde "exim" benutzen, um die Post von CYGWIN zu senden.

Die Sache ist, dass exim ist nur optional bei der Installation von CYGWIN und ich möchte mein SH-Skript beenden, wenn es nicht installiert ist. Irgendeine Idee, um UNIX (und Arbeiten in CYGWIN) zu überprüfen, wenn eine App in einem Skript installiert ist?

Vielen Dank im Voraus!

Antwort

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

Danke, das schließlich sah einfach aus, aber nicht wissen Sie den Befehl:) – Amadeus45

0

Sie können den 'which' Befehl verwenden. Es gibt Ihnen den Speicherort des Programms oder nichts, wenn nicht vorhanden.

2

Speziell für 'exim' zu überprüfen, führen

exim -bV 

Auf meinem Cygwin es eine Ausgabe gibt wie,

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 

Vom 'exim' Handbuch 'exim -bV' ,

Diese Option bewirkt, dass Exim die aktuelle Versionsnummer, Kompilierung, schreibtNummer und Kompilierungsdatum der Exim-Binärdatei zur Standardausgabe. Es listet außerdem die verwendete DBM-Bibliothek, die optionalen Module (z. B. bestimmte Suchtypen), die Treiber, die in der Binärdatei enthalten sind, und den Namen der Laufzeitkonfigurationsdatei auf, die verwendet wird.

Als Teil seiner Operation veranlasst -bV, dass Exim seine Konfigurationsdatei liest und syntaktisch überprüft. Dies ist jedoch nur eine statische Prüfung. Es kann nicht überprüft werden, Werte, die erweitert werden sollen. Zum Beispiel, obwohl ein falsch geschriebenes ACL Verb erkannt wird, ist ein Fehler in den Argumenten des Verbs nicht. Sie können sich nicht allein auf -bV verlassen, um beispielsweise alle Tippfehler in der Konfiguration zu finden; sind einige realistische Tests erforderlich. Die Optionen -bh und -N bieten mehr dynamische Testeinrichtungen.


Im Vergleich mit den type und which Kontrollen.

Typ ist ein Shell-Befehl eingebaut. Es zeigt an, wie ein Name von der Shell interpretiert wird, wenn er als Befehl verwendet wird. Die Option -p bewirkt, dass der Name der Datenträgerdatei zurückgegeben wird, die bei der Ausgabe des Befehls ausgeführt würde.

die einfach für eine ausführbare Datei bei der Suche nach dem angegebenen Namen sucht PATH den gleichen bash Algorithmus.

Eine dieser Optionen gibt "true" zurück, wenn jemand eine ausführbare Datei mit demselben Namen in den Pfad eingibt. Sie sollten vorsichtiger sein, wenn Sie Befehle aus einem Skript aufrufen, wenn die Sicherheit ein Problem darstellt.

Es kann sinnvoll sein zu wissen, was Sie gerade ausführen.
Natürlich kann ich auch ein Shell-Skript namens exim implementieren, die die obige Eingabe auf -bV zurückgibt; und Dinge im Hintergrund zu vermasseln - wie hoch ist deine Paranoia?

0

die die Sicherheit erhöhen möchten, dass nik gebracht Sie den Speicherort der ausführbaren Datei gegen eine erwartete Liste der Standorte überprüfen:

case $(type -p someprog) in 

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

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