Veröffentlicht 16. Februar 200619 j Hi, kleines Problem mit Shellscripten und Parametern. script1 param1_dir=$1 echo $param1_dir if [ -d $param1_dir ] then export ABC=$param1_dir else export ABC=/opt/abc fi script2 param1_command=$1 param2_dir=$2 if [ $param1_command ] then . script1 $param2_dir else . script1 fi Problem ist nun wenn ich script1 alleine starte funktionierts wunderbar. Starte ich script2 mit ./script2 delete /opt/abc funktioniert alles. ./script delete funktioniert nicht weil bei script eins dann beim echo $param1_dir "delete" ausgegeben wird. Problem ist also das wenn ich script1 ohne Parameter aus script2 aufrufe übergibt er immer das $param1_command als $1. Weiss jemand wie ich das umgehen kann? Gruß Scratch
16. Februar 200619 j bisschen konfus das ganze. also ich blicke bei deiner erklährung und 5 minütigen studieren der skripte nicht durch was du vorhast. für was ist denn ABC? was meinst du mit ./script delete muss das in 2 scripten sein? vielleicht steh ich auch aufm schlauch aber ich verstehs nich... sorry :floet:
16. Februar 200619 j Weiss jemand wie ich das umgehen kann? Ja. Nimm die Punkte vor den Skriptaufrufen weg.
16. Februar 200619 j Autor danke für die Antworten! Das sind natürlich nur Beispielscripte ohne Sinn. @shutdown-Frnow: leg die Dateien doch einfach mal an und probiers dann siehst du schon was ich meine. @1226: Dann geht garnichts. "command not found" ist der Fehler.
16. Februar 200619 j Autor Ok ... dazu hab ich dann noch eine Frage: Benutze ich . meinscript und es werden Variabeln exportiert sind diese danach immer noch mit env sichtbar. Benutze ich ./meinscript sind sie nicht in env sichtbar Gibt es sonst noch unterschiede?
16. Februar 200619 j naja ich kenen . meinscript z.B. im zusammenhang mit umgebungsvariablen also beispielsweise . .bashrc um die bashrc neu zu sourcen wenn du was dran verändert hast. ./meinscript ruft das script auf
16. Februar 200619 j Ja sicher gibt es einen klaren Unterschied: ". file" bzw. "source file" sourced die Datei und das bedeutet, dass es so ist, als würde man hergehen und via copy&pasty die Datei file anzufügen, sprich der Inhalt der Datei file wird in eine andere Datei bzw. die Shell geschrieben.
16. Februar 200619 j Autor Also leider geht es nicht wirklich ... ich hab jetzt aber 2 bessere Testscripte für jeden der mir noch helfen möchte. script1 parama=$1 echo "1 --- parama="$parama if [ $parama ] then echo "1 --- parama is set" if [ -d $parama ] then echo "1 --- dir: "$parama export ABC=$parama else echo "1 --- dir does not exist" fi else echo "1 --- standard: /opt/abc" export ABC=/opt/abc fi script2 command=$1 directory=$2 echo "2 --- command="$command echo "2 --- directory="$directory if [ $command ] then echo "2 --- command is set" if [ $directory ] then echo "2 --- directory is set" . script1 $directory else echo "2 --- directory is not set" . script1 fi else echo "2 --- command is not set" fi Hier die Ergebnisse des Scriptes $ ./script2 #FALL 1 korrekt 2 --- command= 2 --- directory= 2 --- command is not set $ ./script2 aaa #FALL 2 falsch 2 --- command=aaa 2 --- directory= 2 --- command is set 2 --- directory is not set 1 --- parama=aaa 1 --- parama is set 1 --- dir does not exist $ ./script2 aaa /opt/ #FALL 3 korrekt 2 --- command=aaa 2 --- directory=/opt/ 2 --- command is set 2 --- directory is set 1 --- parama=/opt/ 1 --- parama is set 1 --- dir: /opt/ $ ./script2 aaa bbb #FALL 4 korrekt 2 --- command=aaa 2 --- directory=bbb 2 --- command is set 2 --- directory is set 1 --- parama=bbb 1 --- parama is set 1 --- dir does not exist Bis auf Fall 2 geht alles. Wie man sieht übernimmt hier "parama" den wert von "command" und das soll es nicht ... Für Fall 2 sollte das Ergebnis "dir: /opt/abc" sein. Danke!! Gruß Scratch
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.