Hi
Ich bin grad dran mir ein kleines Shellscript zu basteln, habe aber Probleme mit einem einfachen Problem: Das Script soll einen Dateinamen annehmen und den an ein anderes proggy weitergeben (so ein bisschen wrapper mässig)
zB: #!/bin/bash FILE="$1" #(...) /bin/somescript --bla --blu ${FILE}
Das funktioniert auch für normale Dateinamen. Wenn ich jedoch Leerzeichen im Dateinamen habe, gehts nicht mehr. Alle Versuche mit den folgenden Varianten scheiterten: FILE=""$1"" FILE="'$1'" FILE=`echo "$1" | sed 's/ /\ /'`
Anscheinend kommt das dann immer als zwei argumente an - wie kann ich das lösen??
Danke
Matti
Matthias Keller wrote:
Ich bin grad dran mir ein kleines Shellscript zu basteln, habe aber Probleme mit einem einfachen Problem: Das Script soll einen Dateinamen annehmen und den an ein anderes proggy weitergeben (so ein bisschen wrapper mässig)
zB: #!/bin/bash FILE="$1" #(...) /bin/somescript --bla --blu ${FILE}
Das funktioniert auch für normale Dateinamen. Wenn ich jedoch Leerzeichen im Dateinamen habe, gehts nicht mehr. Alle Versuche mit den folgenden Varianten scheiterten: FILE=""$1"" FILE="'$1'" FILE=`echo "$1" | sed 's/ /\ /'`
Das kannst'e alles weglassen.
Anscheinend kommt das dann immer als zwei argumente an - wie kann ich das lösen??
Indem Du den Aufruf von /bin/somescript richtig machst? Versuch doch mal /bin/somescript --bla --blu "${FILE}".
Andreas
Am Montag, 31. März 2008 schrieb Matthias Keller:
Hi
Ich bin grad dran mir ein kleines Shellscript zu basteln, habe aber Probleme mit einem einfachen Problem: Das Script soll einen Dateinamen annehmen und den an ein anderes proggy weitergeben (so ein bisschen wrapper mässig)
zB: #!/bin/bash FILE="$1" #(...) /bin/somescript --bla --blu ${FILE}
Angenommen das obige Skriptfragment heißt script1. Dann musst Du die Parameter bereits beim Aufruf von script1 quoten
script1 "Datei Name mit Leerzeichen"
sonst erhälst Du FILE="Datei"
Grüße Ralf
Hallo Matthias,
On Monday 31 March 2008 12:36:52 Matthias Keller wrote:
#!/bin/bash FILE="$1" #(...) /bin/somescript --bla --blu ${FILE}
Erst mal hier quoten:
/bin/somescript --bla --blu "${FILE}"
Und beim Aufrauf deines Wrappers natuerlich auch nochmal, also z.B.
wrapperscript 'Ein File mit Leer- und Sonderzeichen im Namen (so ein Quatsch)'
Roman
Roman Fietze wrote:
Hallo Matthias,
On Monday 31 March 2008 12:36:52 Matthias Keller wrote:
#!/bin/bash FILE="$1" #(...) /bin/somescript --bla --blu ${FILE}
Erst mal hier quoten:
/bin/somescript --bla --blu "${FILE}"
Und beim Aufrauf deines Wrappers natuerlich auch nochmal, also z.B.
wrapperscript 'Ein File mit Leer- und Sonderzeichen im Namen (so ein Quatsch)'
Hi
Beim Aufruf ist klar, doch beim somescript kann ich leider keine quotes drum machen, da ${FILE} möglicherweise mehr als ein Dateiname enthält. Sprich das somescript wird entweder mit einem filenamen aufgerufen oder mit mehreren und ich möchte den aufruf nicht zweimal reinschreiben müssen... (das passiert im #(...), welches ich weggelassen habe - dort wird ggf ${FILE} noch geändert in mehrere dateinamen zB via `ls -1 "$1" | xargs` wenn $1 ein Verzeichnis ist)
Oder geht das, was ich will nicht mit einem einzelnen Aufruf von somescript? also zB soll folgendes passieren: $ wrapperscript "blabla file.txt" -> /bin/somescript --bla --blu "blabla file.txt"
$ wrapperscript . -> /bin/somescript --bla --blu "blabla file.txt" "another blablafile in the same directory.txt"
Vielen Dank
Matti
Hallo Matthias,
On Monday 31 March 2008 14:13:28 Matthias Keller wrote:
Beim Aufruf ist klar, doch beim somescript kann ich leider keine quotes drum machen, da ${FILE} möglicherweise mehr als ein Dateiname enthält.
Ohne Umweg ueber $FILES:
#/bin/bash # ...
/bin/somescript --bla --blu "$@"
Mit Umweg ueber $FILES (bitte noch testen, einfach mal so hingeschrieben):
#!/bin/bash declare -a FILES=( "$@" ) # mach was mit FILES ... /bin/somescript --bla --blu "${FILES[@]}"
Roman