Re: [PUG] Parameter in Shell-Funktion
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
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
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
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
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
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
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
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
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
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
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
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