Re: [PUG] Parameter in Shell-Funktion

2009-05-17 Diskussionsfäden Jochen Hein
Stephan Wezorke swezo...@rbg.informatik.tu-darmstadt.de writes:

 Hmm... Der Fehler lag bei mir. Ich hatte deine vorletzte Mail missverstanden, 
 in der du sagtest ich müsse nur list $* machen. Damit hast du natürlich 
 vollkommen Recht, so wird mein Problem gelößt.

Prima.  Danke für die Rückmeldung.

Jochen

-- 
The only problem with troubleshooting is that the trouble shoots back.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-12 Diskussionsfäden Jochen Hein
Stephan Wezorke swezo...@rbg.informatik.tu-darmstadt.de writes:

 Am Montag 11 Mai 2009 11:45:02 schrieb Jochen Hein:
 Stephan Wezorke swezo...@rbg.informatik.tu-darmstadt.de writes:
  Hier noch mal ein Beispiel zur Verdeutlichung:
  #!/bin/bash
  list() {
 echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
 while [ $# -gt 0 ]
 do
 echo $1 # Wird entsprechend erst garnicht aufgerufen.
 done
  }
  list;

 Da solltest Du list $* machen.  Oder halt die Parameter, die Du
 brauchst.  Oder?

 Falls ich die Variablen nur ausgeben würde hättest du Recht. Das sollte hier 
 nur ein Beispiel sein, eigentlich mache ich so ein paar Sachen in der 
 Funktion.

Ja, aber woher soll denn die Funktion wissen, welche Werte sie
bearbeiten soll?  Das ist ja vollkommen unabhängig davon, was in der
Schleife passieren soll.

Hm, bei mir macht der echo $# genau das, was man erwartet - bei 
list 1 2 3;:

[23:23:04]:echidna:(pts/3):~/scripts$ bash funtest.sh
+ list 1 2 3
+ echo 3
3

Wenn ich list $* verwende, und mein Skript mit Parametern aufrufe, dann
ist es auch ok.  Hier mein Testscript:

#!/bin/bash
set -x
list() {
echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
while [ $# -gt 0 ]
do
echo $1 # Wird entsprechend erst garnicht aufgerufen.
shift
done
}
list 1 2 3; # oder list $*


Wenn ich in der Funktion eine Variable setze, dann kommt es auch im
Hauptprogramm an:

#!/bin/bash
set -x
a=1
list() {
echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
while [ $# -gt 0 ]
do
echo $1 # Wird entsprechend erst garnicht aufgerufen.
shift
done
echo $a
a=2
}
list $*;
echo $a

Ich glaube, ich habe Dein Problem noch nicht verstanden.

Jochen

-- 
The only problem with troubleshooting is that the trouble shoots back.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-11 Diskussionsfäden Mario Schmidt
Am Montag, 11. Mai 2009 schrieb Stephan Wezorke:
  Moin,
  du suchst nicht zufälligerweise getopt ? Gibt es auch für die Shell.
 
  Gruß
 
  Mario Schmidt

 Hallo Mario,

 nein, es ging darum Variablen, die ich selbst im Skript definiert hatte
 auch in einer Funktion verwenden zu können. Die Parameter von außen lese
 ich anders ein.

 Gruß Stephan

Hatte nur so den Eindruck...

Gruß

Mario

-- 
Es ist nie zu spaet, eine glueckliche Kindheit zu haben.


signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-11 Diskussionsfäden Stephan Wezorke
Am Montag 11 Mai 2009 11:45:02 schrieb Jochen Hein:
 Stephan Wezorke swezo...@rbg.informatik.tu-darmstadt.de writes:
  Hier noch mal ein Beispiel zur Verdeutlichung:
  #!/bin/bash
  list() {
  echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
  while [ $# -gt 0 ]
  do
  echo $1 # Wird entsprechend erst garnicht aufgerufen.
  done
  }
  list;

 Da solltest Du list $* machen.  Oder halt die Parameter, die Du
 brauchst.  Oder?

 Jochen

Falls ich die Variablen nur ausgeben würde hättest du Recht. Das sollte hier 
nur ein Beispiel sein, eigentlich mache ich so ein paar Sachen in der 
Funktion.

Gruß Stephan



signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-10 Diskussionsfäden Stephan Wezorke
Ich hab mal ein wenig damit rumgespielt, und die Option -C bietet alles was 
ich brauche. 
Setzt man -C Verzeichnis, dann wechselt tar vor dem Hinzufügen der nächsten 
angegebenen Datei in das entsprechende Verzeichnis.

Gruß Stephan

Am Freitag 08 Mai 2009 13:25:51 schrieb Benjamin Peter:
 Hi,

 Stephan Wezorke wrote:
  vielen Dank für die Antworten, die Shift-Anweisung hatte ich hier im

 Beispiel

  einfach nur vergessen, was für mich lediglich neu war, war die Übergabe
  der Parameter an die Funktion.
  Das funktioniert übrigens alles super so, vielen Dank.
  Es ist allerding noch eine andere Frage aufgekommen:
  Wenn ich ein tar-Archiv erstelle: tar -cf test.tar /dir/dir2, dann wird
  im Archiv ja die Hierachie /dir/dir2 gespeichert. Wie kann ich ein Archiv
  erstellen in dem nur /dir2 liegt, ohne in das entsprechende Verzeichnis
  abzusteigen?
  Ich möchte nämlich mehrere Dateien so in einen Archivstrom speichern,
  ohne die Ordnerstrukturen mitzuübergeben.

 Also ich kenne da nur -C aus man tar aber es scheint auch
 --transform expr zu geben mit dem du die 1. Ordnerhierarchie
 herausfiltern könntest.

 Ben.
 --
 ---
- PUG - Penguin User Group Wiesbaden - http://www.pug.org



signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-10 Diskussionsfäden Mario Schmidt
Am Donnerstag, 7. Mai 2009 schrieb Stephan Wezorke:
 Hallo Leute,

 ich würde gerne die Bearbeitung von Parametern $1, $2, usw. in eine
 Funktion auslagern, da ich diese an verschiedenen Stellen aufrufe.
 Dummerweise zählt die Funktion wohl nicht zum Scope-Bereich. Hat jemand
 eine Idee, was man da machen kann?

 Hier noch mal ein Beispiel zur Verdeutlichung:
 #!/bin/bash
 list() {
   echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
   while [ $# -gt 0 ]
   do
   echo $1 # Wird entsprechend erst garnicht aufgerufen.
   done
 }
 list;

 Gruß Stephan

Moin,
du suchst nicht zufälligerweise getopt ? Gibt es auch für die Shell.

Gruß

Mario Schmidt
-- 
Es ist nie zu spaet, eine glueckliche Kindheit zu haben.


signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-10 Diskussionsfäden Stephan Wezorke

 Moin,
 du suchst nicht zufälligerweise getopt ? Gibt es auch für die Shell.

 Gruß

 Mario Schmidt

Hallo Mario,

nein, es ging darum Variablen, die ich selbst im Skript definiert hatte auch in 
einer Funktion verwenden zu können. Die Parameter von außen lese ich anders 
ein.

Gruß Stephan


signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


[PUG] Parameter in Shell-Funktion

2009-05-08 Diskussionsfäden Stephan Wezorke
Hallo Leute,

ich würde gerne die Bearbeitung von Parametern $1, $2, usw. in eine Funktion 
auslagern, da ich diese an verschiedenen Stellen aufrufe. Dummerweise zählt 
die Funktion wohl nicht zum Scope-Bereich. Hat jemand eine Idee, was man da 
machen kann?

Hier noch mal ein Beispiel zur Verdeutlichung:
#!/bin/bash
list() {
echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
while [ $# -gt 0 ]
do
echo $1 # Wird entsprechend erst garnicht aufgerufen.
done
}
list;

Gruß Stephan


signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-08 Diskussionsfäden Benjamin Peter

Hi,

Stephan Wezorke wrote:
ich würde gerne die Bearbeitung von Parametern $1, $2, usw. in eine Funktion 
auslagern, da ich diese an verschiedenen Stellen aufrufe. Dummerweise zählt 
die Funktion wohl nicht zum Scope-Bereich. Hat jemand eine Idee, was man da 
machen kann?


Hier noch mal ein Beispiel zur Verdeutlichung:
#!/bin/bash
list() {
echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
while [ $# -gt 0 ]
do
echo $1 # Wird entsprechend erst garnicht aufgerufen.
done
}
list;


Ja der Scope ist ein anderer aber du kannst die Parameter ja einfach 
reinreichen. (Zudem solltest dich wohl um die Endlosschleife kümmern *g*)


#!/bin/bash

list() {
echo $#
if [ $# -gt 0 ]
then
echo $1
fi
}

list $* # 

--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-08 Diskussionsfäden Klaus Klein
Moin Stephan, 


zwei Punkte:
- ohne eine 'shift'-Anweisung wird die While-Schleife zum Endlos-Loop.
- ohne Parameterübergabe an die Funktion kann 'list' nichts ausgeben.

Probier mal:

#!/bin/bash
list() {
echo $#
while [ $# -gt 0 ]
do
  echo $1
done
}
list $*;
# oder
list $@;

Gruß,
Klaus

Stephan Wezorke wrote:

Hallo Leute,

ich würde gerne die Bearbeitung von Parametern $1, $2, usw. in eine Funktion 
auslagern, da ich diese an verschiedenen Stellen aufrufe. Dummerweise zählt 
die Funktion wohl nicht zum Scope-Bereich. Hat jemand eine Idee, was man da 
machen kann?


Hier noch mal ein Beispiel zur Verdeutlichung:
#!/bin/bash
list() {
echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
while [ $# -gt 0 ]
do
echo $1 # Wird entsprechend erst garnicht aufgerufen.
done
}
list;

Gruß Stephan




--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-08 Diskussionsfäden Stephan Wezorke
Hallo zusammen,

vielen Dank für die Antworten, die Shift-Anweisung hatte ich hier im Beispiel 
einfach nur vergessen, was für mich lediglich neu war, war die Übergabe der 
Parameter an die Funktion.
Das funktioniert übrigens alles super so, vielen Dank.
Es ist allerding noch eine andere Frage aufgekommen:
Wenn ich ein tar-Archiv erstelle: tar -cf test.tar /dir/dir2, dann wird im 
Archiv ja die Hierachie /dir/dir2 gespeichert. Wie kann ich ein Archiv 
erstellen in dem nur /dir2 liegt, ohne in das entsprechende Verzeichnis 
abzusteigen?
Ich möchte nämlich mehrere Dateien so in einen Archivstrom speichern, ohne die 
Ordnerstrukturen mitzuübergeben.

Gruß Stephan

Am Freitag 08 Mai 2009 11:55:07 schrieb Klaus Klein:
 Moin Stephan,

  zwei Punkte:
 - ohne eine 'shift'-Anweisung wird die While-Schleife zum Endlos-Loop.
 - ohne Parameterübergabe an die Funktion kann 'list' nichts ausgeben.

 Probier mal:

 #!/bin/bash
 list() {
   echo $#
   while [ $# -gt 0 ]
   do
 echo $1
   done
 }
 list $*;
 # oder
 list $@;

 Gruß,
 Klaus

 Stephan Wezorke wrote:
  Hallo Leute,
 
  ich würde gerne die Bearbeitung von Parametern $1, $2, usw. in eine
  Funktion auslagern, da ich diese an verschiedenen Stellen aufrufe.
  Dummerweise zählt die Funktion wohl nicht zum Scope-Bereich. Hat jemand
  eine Idee, was man da machen kann?
 
  Hier noch mal ein Beispiel zur Verdeutlichung:
  #!/bin/bash
  list() {
  echo $# # Gibt 0 aus, auch wenn man Parameter übergibt
  while [ $# -gt 0 ]
  do
  echo $1 # Wird entsprechend erst garnicht aufgerufen.
  done
  }
  list;
 
  Gruß Stephan
 
 
  
 
  --
  -
 --- PUG - Penguin User Group Wiesbaden - http://www.pug.org

 --
 ---
- PUG - Penguin User Group Wiesbaden - http://www.pug.org



signature.asc
Description: This is a digitally signed message part.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] Parameter in Shell-Funktion

2009-05-08 Diskussionsfäden Benjamin Peter

Hi,

Stephan Wezorke wrote:
vielen Dank für die Antworten, die Shift-Anweisung hatte ich hier im 

Beispiel
einfach nur vergessen, was für mich lediglich neu war, war die Übergabe der 
Parameter an die Funktion.

Das funktioniert übrigens alles super so, vielen Dank.
Es ist allerding noch eine andere Frage aufgekommen:
Wenn ich ein tar-Archiv erstelle: tar -cf test.tar /dir/dir2, dann wird im 
Archiv ja die Hierachie /dir/dir2 gespeichert. Wie kann ich ein Archiv 
erstellen in dem nur /dir2 liegt, ohne in das entsprechende Verzeichnis 
abzusteigen?
Ich möchte nämlich mehrere Dateien so in einen Archivstrom speichern, ohne die 
Ordnerstrukturen mitzuübergeben.


Also ich kenne da nur -C aus man tar aber es scheint auch 
--transform expr zu geben mit dem du die 1. Ordnerhierarchie 
herausfiltern könntest.


Ben.
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org