subshell? - wie?

T

tco

sysinstall/noob
ich komme gerade nich weiter beim bau einer subshell (sofern ich sie überhaupt brauche).
ich hab ein verzeichnis mit mehreren tar.gz files. das möchte ich nun auslesen, aber ohne .tar.gz am ende. die bash soll mir nur den namen des pakets ausspucken.

wenn ich nun ein for i in ...; do echo ${i%.tar.gz} direkt in der bash eingebe dann bekomme ich gewünschtes ergebnis.
innerhalb eines scriptes bekomme ich alledings einen fehler.

wie muss ich in dem fall den den befehl innerhalb eines scripts übgeben?

vielen dank schonmal.
 
Hi,

das funktioniert in einem Skript genauso wie direkt in der Shell:
Code:
#!/bin/bash

for i in ./*; do
   echo ${i%.tar.gz}
done
Und die Fehlermeldung waere?

mfg,
bytepool
 
falscher austausch sagt die bash.

auch bei deinem beispiel... :think:
 
Genauer Fehler bitte.
Bei mir funktioniert das Beispiel übrigens bis auf die Tatsache, dass es alle Daten ausgibt.
Code:
#!/bin/bash

for i in ./*.tar.gz; do
   echo ${i%.tar.gz}
done
wäre also besser, oder? Bin in Bash nicht so beflügelt ;)
 
Hi,
falscher austausch sagt die bash.

aha, ist das vielleicht die deutsche Version fuer bad substitution? Dann haette ich eine wilde Vermutung: du nutzt nicht die bash, sondern /bin/sh, was auch immer das bei dir fuer eine Shell ist.
Use the source, Luke. Ohne genauen Source und genaue Angaben, wie Shell und System, ist das recht sinnlos hier...

@nighT
Jo, das gibt alle Dateien aus, das sollte auch nur fix zeigen wie das ungefaehr geht, keine massgeschneiderte Loesung sein. ;)

mfg,
bytepool
 
vielleicht postets du auch mal ein wenig besipielcode. was hast du bisher schon gemacht?

so ist das wie bytepool schon gesagt, wildes herumraten.
 
sry, stimmt. mehr angaben wären angemessen.
also es handelt sich um solaris 10. ich arbeite da in der bash. das script aber ruft tatsächlich die sh auf, nicht die bash. das ist mir auch erst heute eingefallen.
in der bash gehts ptoblemlos. in der sh nicht. genau da bekomm ich den fehler 'falscher austausch'. mehr nicht.

das script an sich beinhaltet momentan noch nicht mehr. bzw. ich teste gerade nur den einen abschnitt.
genauer gesagt soll es ein script werden dass ich nach einer minimalinstallation von solaris durchlaufen lassen will. und in der minimalinstallarion hab ich noch keine bash, nur die sh.

ich nehm an dass bad substitution in dem fall bedeutet dass die sh nichts mit dem befehl anfangen kann?
 
Hi,

ich kenne mich mit Solaris gar nicht aus, aber haeufig ist /bin/sh wie schon gesagt nur ein Symlink auf eine andere Shell. Schau doch mal mit "ls -lF /bin/sh" ob das tatsaechlich ein Programm ist, oder ein Link.

Ansonsten, ja, bad substitution bedeutet, dass er die Variable nicht ein deinem Sinne "expandiert" bekommt (parameter expansion). Was genau von der verwendeten Shell unterstuetzt wird, wuerde ich in der entsprechenden Manpage nachschlagen.

mfg,
bytepool
 
ne, /bin/sh ist ein link auf /sbin/sh. das aber ist dann tatsächlich die sh.
ich hab aber festgestellt dass standardmässig auch die ksh installiert ist. und mit der läuft mein script durch.

danke auf alle fälle für die hilfen :)
 

Ähnliche Themen

HandbrakeCLI Shell Skript

Dateien löschen mit negierun

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Bash Skript: [[: not found Fehler

Letzten Tag löschen

Zurück
Oben