Hallo,
was ist hier faul?
export test `su - xxxadm -c /bin/sh -c "'echo \$dbms_type'"`; echo $test
![]() Anmeldungsdatum: Beiträge: 161 Wohnort: vergessen |
Hallo, was ist hier faul?
export test `su - xxxadm -c /bin/sh -c "'echo \$dbms_type'"`; echo $test |
||
![]() Anmeldungsdatum: Beiträge: 17605 Wohnort: Berlin |
Der Fragesteller, der uns rätseln läßt. worum es geht? Geraten: Es fehlt ein 'gleich'. export test=$(su - xxxadm -c /bin/sh -c "'echo \$dbms_type'") echo $test |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 161 Wohnort: vergessen |
Danke! Zur Auflösung des Rätsels. Ich will ein Löschskript zum entfernen von SAP schreiben. Dafür muss ich mich als User SIDadm, oraSID, jeweils anmelden um zu schauen ob das SAP "oben" ist, um es zu stoppen und um mir weiterhin noch ein paart Variablen als der User SIDadm zu ziehen und um dann das überflüssige zu löschen. das Ziehen des dbms_types klappt. Jetzt meckert aber der case ... export dbms_type=$(su - xxxadm -c /bin/sh -c "' echo \$dbms_type'"); case "$dbms_type" in oracle) rm -f \/sapmnt/\${SAPSYSTEMNAME}\/bleder_test\*;; esac case: Too many arguments. Too many )'s. esac: Command not found. |
||
![]() Anmeldungsdatum: Beiträge: 17605 Wohnort: Berlin |
wenze schrieb:
Die Formulierung 'Variable ziehen' sagt mir ja gar nichts. Heißt das 'ansehen, auswerten' und wo sagt man das?
Maskierungen verteilst Du so per Gießkanne/experimentell, oder? Der Slash vor sapmnt bedarf keiner Maskierung. echo $HOME /home/stefan echo \$HOME $HOME |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 161 Wohnort: vergessen |
Ja mehr "experimentell", da ich mit der Maskierung so meine Probleme habe. Und ja ich meinte die Variable auswerten. Danke jetzt läuft es. Bin aber für jeden Tipp, was verbessert werden sollte, dankbar.
|
||
![]() Anmeldungsdatum: Beiträge: 17605 Wohnort: Berlin |
Kannst Du erklären wozu die ganzen exports gut sind? Ich habe jetzt nicht nach Tricks Ausschau gehalten, aber diese vielen sus machen einen ganz wirr. Wäre es nicht besser die sus alle bis auf eines zu eliminieren, welches man um das ganze Script hüllt, oder verpasse ich da was? Auch überdreht scheint mir, mit su eine SHELL aufzurufen, und damit echo, um das Ergebnis dann einer Variablen zuzuweisen. Meist ist HOME=$(echo $HOME) ja eine neutrale Operation, und HOME=$(someShell -c "echo \$HOME") ist nur noch eine zusätzliche Hülle. #!/bin/bash set -x #set -v export SID=$1 function r3run () { R3trans -x if [ "$?" = 0 ] then echo " SAP is already running " fi cd /sapmnt/${SAPSYSTEMNAME} touch bleder_test bleder_test{1..3} cd - ls -l /sapmnt/$SAPSYSTEMNAME echo "Das ist die SID: "$SAPSYSTEMNAME echo "Das ist der Datenbanktyp: "$dbms_type case "$dbms_type" in db6) rm -f /sapmnt/${SAPSYSTEMNAME}/bleder_test*;; esac ls -l /sapmnt/${SAPSYSTEMNAME} } su - $SID"adm" r3run müsste m.E. das gleiche machen. |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 161 Wohnort: vergessen |
Deine Idee gefällt mir ganz gut. Ich werde mal testen und versuchen mein Gelumpe damit aufzubauen. Meine Probleme sind: - Skript läuft als unprivilegierter User - ich brauche zum einen mehrere Umgebungsvariablen vom SIDadm (SAP-User) und Datenbank-User (datenbankanhängig) - bestimmte Stopp-Skripte müssen unter den User (z.B. SIDadm) laufen um SAP, ein paar Dienste und die Datenbank stoppen zu können - des weiten möchte ich halt nur bestimmte Sachen löschen, da ist es mir lieber, das mit dem Eigner zu machen - das ganze muss unter Liux, AIX, HPUX und Solaris laufen Das sind so ein paar Punkte die mir das "Leben" schwer machen |