subshell? - wie?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tco, 21.07.2009.

  1. tco

    tco sysinstall/noob

    Dabei seit:
    22.01.2007
    Beiträge:
    20
    Zustimmungen:
    0
    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.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 21.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  4. tco

    tco sysinstall/noob

    Dabei seit:
    22.01.2007
    Beiträge:
    20
    Zustimmungen:
    0
    falscher austausch sagt die bash.

    auch bei deinem beispiel... :think:
     
  5. nighT

    nighT Guest

    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 ;)
     
  6. #5 bytepool, 21.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,
    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
     
  7. #6 tuxlover, 21.07.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    vielleicht postets du auch mal ein wenig besipielcode. was hast du bisher schon gemacht?

    so ist das wie bytepool schon gesagt, wildes herumraten.
     
  8. tco

    tco sysinstall/noob

    Dabei seit:
    22.01.2007
    Beiträge:
    20
    Zustimmungen:
    0
    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?
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 bytepool, 22.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  11. tco

    tco sysinstall/noob

    Dabei seit:
    22.01.2007
    Beiträge:
    20
    Zustimmungen:
    0
    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 :)
     
Thema:

subshell? - wie?

Die Seite wird geladen...

subshell? - wie? - Ähnliche Themen

  1. Variable in Subshell global deklarieren

    Variable in Subshell global deklarieren: Hallo! mit untenstehendem code wird eine subshell geöffnet, in der dann die while-schleife ausgeführt wird. Die variable $i brauch ich nachher...