Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
commando mit o. ohne optionen abfangen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 04. Okt 2002 19:24   Titel: commando mit o. ohne optionen abfangen

Hi lug,

ist es moeglich, zb. das debian apt-get kommando abzufangen, sodass die option install abgefangen und geloggt wird, alle anderen wie zb. search jedoch nicht?

Ziel ist folgendes: Installation von debian bei einem newbie, der natuerlich selbst sachen macht, ohne genau bescheid zu wissen.
informativ soll er natuerlich machen was er will, jedoch moechte ich gerne nachinstallationen von software in einem logfile finden koennen, zb. dadurch, dass

apt-get install tollesoftware

durch

apt-get install tollesoftwaere | tee /var/spool/logdir/<$DATE>apt-get.install.tollesofware

substituiert wird.
kann man da einen alias setzen oder muss man das kommando wrappen und fuer beides gilt:

Wie macht man das am schlauesten?
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

etwa so?
Gast





BeitragVerfasst am: 04. Okt 2002 19:34   Titel: Re: commando mit o. ohne optionen abfangen

mv apt-get apt-get-bin
vi apt-get
chmod a+x apt-get
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 04. Okt 2002 19:51   Titel: Re: commando mit o. ohne optionen abfangen

etwa so ist mir schon klar, was schlaegst du an intelligenz zwischen "vi atp-get" und "chmod a+x apt-get" vor?

note: code bitte mit ub-code, siehe hilfe, escapen!
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

rattengift
Gast





BeitragVerfasst am: 04. Okt 2002 20:40   Titel: Re: commando mit o. ohne optionen abfangen

ich kenn deb zwar nicht, aber das problem ist ja allgemein.
wenn ich recht verstehe müsste das neue script nur prüfen, ob in den parametern "install" vorkommt. wenn nein, gibt er sie direkt weiter ans original apt-get, wenn nicht, zusätzlich mit dem logging. ist das richtig so?

also
code:

PLUS=""
PAKET=$2 # ($2 falls der paketname immer an 2.pos)

for PARAM; do
if [ "$PARAM" = "install" ]; then
DATUM=$(date +%Y-%m-%d)
PLUS=" | tee /var/spool/logdir/$DATUM.apt-get.install.$PAKET"
fi
done

apt-get-bin $* $PLUS



habs nicht ausprobiert, du musst halt ggf noch etwas rumfummeln.
 

Jochen
Gast





BeitragVerfasst am: 04. Okt 2002 21:13   Titel: Re: commando mit o. ohne optionen abfangen

Ich behaupte jetzt einfach mal, dass es so nicht gehen wird. Die Pipeline in der Variablen "PLUS wird nicht als solche zum Zug kommen, da die Shell die Zerlegung in Kommandos schon abgeschlossen hat, bevor die Variablensubstitution beginnt. Alternativ-Vorschlag:

Als allererstes den Namen von apt-get unverändert lassen, statt dessen unter /usr/local/bin (/usr/local/sbin?) ein Skript gleichen Namens anlegen und die PATH-Variable um das entsprechende Verzeichnis am Anfang ergänzen.

/usr/local/bin/apt-get wäre dann beispielsweise
code:
#!/bin/bash
if [ $1 = "install" ] ; then
/usr/bin/apt-get "$@" | tee /var/log/logdir/apt-install.$(date "+%s")
else
/usr/bin/apt-get "$@"
fi

exit $?

Also nur, wenn das erste Argument "install" ist, mit tee mitloggern. An das File wird die Anzahl der Sekunden seit 1.1.1970 GMT angehängt; so wird wenigstens automatisch sortiert, die Zeit lässt sich mittels date leicht umrechnen und die Zeitstempel der Datei sagen ja auch was aus..

Nur bin ich jetzt schon müde und den Fall, dass er irgenwelche Optionen mit angibt, habe ich übersehen. Die müssen dann natürlich erst mal überlesen werden... Aber nicht mehr heute.

Jochen
 

rattengift
Gast





BeitragVerfasst am: 04. Okt 2002 21:44   Titel: Re: commando mit o. ohne optionen abfangen

Hi Jochen,

> Die Pipeline in der Variablen "PLUS wird nicht als solche zum Zug kommen, da die Shell die Zerlegung in Kommandos schon abgeschlossen hat, bevor die Variablensubstitution beginnt.

du hast (wie immer ) recht.

> if [ $1 = "install" ]; then

ok, wenn install immer der erste parameter ist (ich kenne apt-get wie gesagt - noch - nicht), kann man sich das scannen der parameterliste natürlich schenken.

> An das File wird die Anzahl der Sekunden seit 1.1.1970 GMT angehängt; so wird wenigstens automatisch sortiert, die Zeit lässt sich mittels date leicht umrechnen

hier finde ich meine lösung aber doch besser: das datum wird im "sql-format" erzeugt, was auch automatische sortierung gewährleistet.

> Nur bin ich jetzt schon müde

was, um diese zeit schon müde?!

> und den Fall, dass er irgenwelche Optionen mit angibt, habe ich übersehen.
> Die müssen dann natürlich erst mal überlesen werden...

aber genau das macht doch das for-loop. einen kompromiss aus beiden skripts könnte etwa so aussehen:
code:

#!/bin/sh
INST=false

for PARAM; do
[ "$PARAM" = "install" ] && INST=true
done

if [ "$INST" = "true" ]; then
/usr/bin/apt-get "$@" | tee /var/log/logdir/apt-install.$(date +%Y-%m-%d)
else
/usr/bin/apt-get "$@"
fi

exit $?


oder hab ich nun wieder irgendwas übersehen?
 

Jochen
Gast





BeitragVerfasst am: 05. Okt 2002 16:04   Titel: Re: commando mit o. ohne optionen abfangen

> was, um diese zeit schon müde?!

Tja, bin momentan nicht ganz fit, muss mir irgendwo was gefangen haben.

Eigentlich bin ich bei solchen Skripten ein wenig nickelig, denn man stelle sich vor, ein Paket mit Namen "install" soll deinstalliert werden. Dann greift das Skript, obwohl es das in diesem Fall nicht soll. Aber wenn man in diesem Fall damit zufrieden ist, den wichtigsten Teil korrekt abgedeckt zu haben, will ich mal mein Korinthenkackertum hinten an stellen...

Aber einen echten Kritikpunkt habe ich noch: Meine Datumsangabe sorgt dafür, dass bei mehreren Aufrufen pro Tag jeweils ein eigenes Logfile geschrieben wird. Bei Deiner Variante wird es immer überschrieben, wenn am Tag mehrfach mit "apt-get install" gearbeitet wird. Das wäre am einfachsten mit der Option -a (append) zu tee zu lösen, so dass die Endfassung ungefähr so aussieht:
code:
#!/bin/sh
INST=false

for PARAM; do
[ "$PARAM" = "install" ] && INST=true
done

if [ "$INST" = "true" ]; then
/usr/bin/apt-get "$@" | tee -a /var/log/logdir/apt-install.$(date +%Y-%m-%d)
else
/usr/bin/apt-get "$@"
fi

exit $?

OK?

Jochen
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 05. Okt 2002 16:31   Titel: Re: commando mit o. ohne optionen abfangen

Hi denker,

vielen dank fuer die gehirnarbeit, von der special variable PARAM hatte ich noch nie was gelesen, damit ist die loesung ja recht elegant.

jochen's loesung fuer das zeitproblem finde ich auch sehr schoen, schliesslich muss ich keine informationen ueber die uhrzeit kriegen, die tagesinfo reicht aus zur orientierung.

erste experimente liefen sehr schoen, dabei ist mir aber aufgefallen, das tee errormessages _nicht_ mitloggt Sad also ist ein `1>file 2>&1` als additiv wohl besser, oder?
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Jochen
Gast





BeitragVerfasst am: 05. Okt 2002 17:31   Titel: Re: commando mit o. ohne optionen abfangen

Na ja, dann eben so:
code:
#!/bin/sh
INST=false

for PARAM; do
[ "$PARAM" = "install" ] && INST=true
done

if [ "$INST" = "true" ]; then
/usr/bin/apt-get "$@" 2>&1 | tee -a /var/log/logdir/apt-install.$(date +%Y-%m-%d)
else
/usr/bin/apt-get "$@"
fi

exit $?


Ausserdem gibt es keine Spezial-Variable PARAM; das ist einfach eine spezielle Form der for-Schleife. Ohne explizit mittels "in" angegebenen Liste der zu verwendenden Werte geht die for-Schleife immer über alle Parameter des Shell-Skriptes. Analoge Schreibweise wäre

for ARG in "$@"

Jochen
 

rattengift
Gast





BeitragVerfasst am: 05. Okt 2002 19:18   Titel: Re: commando mit o. ohne optionen abfangen

> Aber einen echten Kritikpunkt habe ich noch: Meine Datumsangabe sorgt dafür, dass bei mehreren Aufrufen pro Tag jeweils ein eigenes Logfile geschrieben wird.
> Bei Deiner Variante wird es immer überschrieben, wenn am Tag mehrfach mit "apt-get install" gearbeitet wird.

richtig. ursprünglich hatte ich ja noch den paketnamen im filenamen, aber auch das ginge natürlich nur dann gut, wenn man nicht das gleiche paket an einem tag mehrfach zu installieren versucht (was ja durchaus vorkommen kann).
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 05. Okt 2002 19:18   Titel: Re: commando mit o. ohne optionen abfangen

jau, *auf die schulter klopf*, das ist useable, transparent und schon wieder was gelernt, wau, cool.

dankeschoen!
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy