1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Shell-Funktion in Script verwenden

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von Luke23ae, 22.01.10.

  1. Luke23ae

    Luke23ae Granny Smith

    Dabei seit:
    27.06.09
    Beiträge:
    13
    Hallo

    Ich habe in ~/.profile eine Funktion "tab" erstellt, die mir einen neuen Tab im Terminal öffnet. Diese möchte ich in meinem Bashscript "test.sh" benutzen. Wenn ich jedoch in script "tab" schreibe sagt er nur "tab: command not found". Woran liegt das und kann man da was tun?

    Mfg
    Lukas
     
  2. mceuskadi

    mceuskadi Grahams Jubiläumsapfel

    Dabei seit:
    28.06.08
    Beiträge:
    104
    ist .profile nicht die Profil Datei von Mac Ports?
     
  3. manromen

    manromen Riesenboiken

    Dabei seit:
    28.01.08
    Beiträge:
    289
    Kannst Du die Funktion mal posten?
    Kann mir jetzt so noch nichts darunter vorstellen.

    [Edit]
    Wenn die Funktion ganz normal im Terminal geht, kannst Du mal probieren:
    Code:
     sh meine_funktion 
    [Edit2]
    Nein das ist die konfigurations Datei von der Shell.
    (sowas wie .bashrc von bash)
     
  4. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.896
    ~/.profile oder ~/.bash_profile werden nur für interaktive Login-Shells ausgeführt.
    Sprich: Die erste und oberste bash-Instanz, die du im Terminalfenster siehst.
    Von dort aus gestartete Skripte sind nicht interaktiv, und dort gestartete weitere bash-Ebenen sind auch keine Login-Shells (by default).

    Bau einfach folgende Zeilen zu Beginn deines Skripts ein:
    Code:
    if    [ -f ~/.bash_profile ] && [ -r ~/.bash_profile ]
    then  source ~/.bash_profile
    elif  [ -f ~/.bash_login ] && [ -r ~/.bash_login ]
    then  source ~/.bash_login
    elif  [ -f ~/.profile ] && [ -r ~/.profile ]
    then  source ~/.profile
    fi
    
    Damit simuliert dein Skript (weitestgehend) ein interaktives Startverhalten. Im Allgemeinen ist das aber NICHT wünschenswert.

    Wenn du in der ~/.profile o.ä. definierte Variablen oder Funktionen in deinen Skripten ebenfalls nutzen möchtest, musst du sie ihnen ganz einfach vererben. Andere Formulierung: Du musst sie zum Teil des Environment, zu einer Umgebungsvariablen der von dort gestarteten Programme machen.
    Das sähe (sahnig) zB so aus:
    Code:
    blabla ()
    {
      [I]hurz -dies -und das;[/I]
    };  
    export -f blabla;
    
    
    MY_VALUE="12345";
    export MY_VALUE;
    
    [COLOR="DarkRed"]# oder (noch ne Möglichkeit, gleiche Wirkung):[/COLOR]
    
    blabla ()
    {
      [I]hurz -dies -und das;[/I]
    }
    declare -fx blabla;
    
    MY_VALUE="12345";
    declare -x MY_VALUE;
    
    [COLOR="DarkRed"]# Oder aber (das nur bei Variablen oder Arrays)
    # auch in verkürzter Form:[/COLOR]
    
    export MY_VALUE="12345";
    
    Durch diesen Export der Variablen und Funktionen werden sie auch in jeder von dort aus gestarteten Shell-Instanz vorhanden sein, egal ob interaktive Shell oder Skript.
    (Es sei denn, man unterdrückt das absichtlich.)
     

Diese Seite empfehlen