ubuntuusers.de

PATH variable erweitern geht nicht

Status: Gelöst | Ubuntu-Version: Ubuntu 6.06 (Dapper Drake)
Antworten |

Dexxter

Anmeldungsdatum:
9. Juni 2006

Beiträge: Zähle...

Hi!

Hab jetzt schon alles mögliche durchprobiert, doch mein Pfad lässt sich einfach nicht über .bash_profile erweitern. export funktioniert aber schon...

hier mein .bash_profile:

# ~/.bash_profile: executed by bash(1) for login shells.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/login.defs
#umask 022

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi

#set additional path variables
PATH=/opt/sun/jdk/bin:"{$PATH}"
JAVA_HOME=/opt/sun/jdk/bin

Eigentlich sind nur die beiden unteren zeilen interessant, mach ich da was falsch?

Lg Dexxter

PS: hab auch versucht meine aliases über .bashrc anzupassen und das hat ohne probleme funktioniert...

ktklin

Avatar von ktklin

Anmeldungsdatum:
20. Mai 2006

Beiträge: 206

Wohnort: Nürnberg

Hallo

die erste Idee ist, dass untet Umständen die geschweiften Klammern stören
Verzichte mal auf die geschweiften Klammern.
PATH=/opt/sun/jdk/bin:"$PATH"
anstatt
PATH=/opt/sun/jdk/bin:"{$PATH}"

Teste die Zeile einfach mal in der Shell und gib den Path mittels echo $PATH aus

siehe auch
man bash

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and
executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile,
~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.
The --noprofile option may be used when the shell is started to inhibit this behavior.

hth

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20095

Wohnort: Schwabenländle

Schau mal ins Wiki: Umgebungsvariable. Da steht, wie man den Pfad korrekt erweitert. Sowohl Anführungszeichen als auch geschweifte Klammern sind falsch.

Gruß, Dee

hartl_vienna

Avatar von hartl_vienna

Anmeldungsdatum:
6. Mai 2005

Beiträge: 275

Wohnort: Wien

Ich stehe vor dem selben Problem. Wenn ich mit dem Eintrag

export PATH=/datenspeicher/programmieren/scripte:$PATH

in .bash_profile die Variable setze, passiert nichts. Mit dem selben Eintrag in .bashrc funktionierts tadellos.

Gemäß dem WIKI

http://wiki.ubuntuusers.de/Umgebungsvariable?highlight=%28variable%29

ist das aber keine ideale Lösung. Aber es funktioniert zumindest.

dehru Team-Icon

Ehemalige
Avatar von dehru

Anmeldungsdatum:
2. Oktober 2005

Beiträge: 2178

Wohnort: Stuttgart

Dexxter hat geschrieben:

Eigentlich sind nur die beiden unteren zeilen interessant, mach ich da was falsch?

PATH=/opt/sun/jdk/bin:"{$PATH}"
JAVA_HOME=/opt/sun/jdk/bin

Ja, die linke geschweifte Klammer ist an der falschen Stelle.

So ist es richtig:

PATH=/opt/sun/jdk/bin:"${PATH}"
JAVA_HOME=/opt/sun/jdk/bin

Der Sinn der geschweiften Klammern liegt darin, der BASH zu sagen, wo der Name der Variable beginnt und wo er zu Ende ist. Oft kommt man ohne die geschweiften Klammern aus, aber eben nicht immer.
Nehmen wir mal an, du hast zwei Variablen VAR=Var und VAR1=Var_1 und machst echo $VAR $VAR1.
Soll jetzt die BASH zweimal den Inhalt der Variable VAR ausgeben und bei der zweiten Ausgabe 1 anhängen? echo ${VAR} ${VAR}1 → Ausgabe "Var Var1"
oder
Soll jetzt die BASH den Inhalt der Variablen VAR und VAR1 ausgeben? echo ${VAR} ${VAR1} → Ausgabe "Var Var_1"

Also muss die öffnende geschweifte Klammer hinter $ sein, und die schließende hinter dem Variablennamen.

dehru Team-Icon

Ehemalige
Avatar von dehru

Anmeldungsdatum:
2. Oktober 2005

Beiträge: 2178

Wohnort: Stuttgart

Dee hat geschrieben:

Schau mal ins Wiki: Umgebungsvariable. Da steht, wie man den Pfad korrekt erweitert. Sowohl Anführungszeichen als auch geschweifte Klammern sind falsch.

Hi Dee, muß dich leider korrigieren. Die Anführungszeichen stören nicht. Die sind dazu da, falls man in PATH Verzeichnisse haben sollte, die Leerzeichen im Namen beinhalten.

Aber, aber:
~/.bash_profile wird beim Login gelesen, die Änderungen sind in dieser Form in einem Terminal nicht ersichtlich.
Wenn die Settings korrekt sind PATH=/opt/sun/jdk/bin:"${PATH}", dann mit Ctrl+Alt+F3 auf ´ne Textkonsole wechseln, einloggen und echo $PATH eingeben. Dann siehst du deinen erweitereten Pfad.

Eventuell muss man die Variable noch exportieren, damit sie bis in die Terminal-Emulation vererbt wird?

Dexxter

(Themenstarter)

Anmeldungsdatum:
9. Juni 2006

Beiträge: 7

Danke für eure Hilfe, jetzt funktionierts! 🤣

hab jetzt endlich verstanden wie .bash_profile und .bashrc zusammenhängen und wann was aufgerufen wird, vielleicht sollte man das im wiki bei der Dokumenentation der Umgebungsvariable noch hinzufügen...

Effektiv hab ich meine zusätzlichen PATH variablen jetzt in die .bashrc geschrieben damit sie auch im Terminal funktionieren, da ja .bash_profile ohnehin in diese datei reinshaut...

@dehru: Danke für die Erklärung der geschweiften Klammern!

Danke nochmals an alle!

Lg Dexxter

PS: Man kann die PATH variable auch in .bash_profile speichern und zwar mit export, also etwa so:

export PATH=/some_dir/some_dir:"${PATH}"

Nur muss man dann im profil des Terminals (Bearbeiten –> Profile... ) im reiter "Titel und Befehl" das Häckchen bei "Befehl als Login-Shell starten" setzen (gefunden
bei:Terminal).

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Bitte schaut euch den Link an, denn Dee Postete. So wie der PATH hier erweitert wird, kann dies zu Problemen führen.

PATH=$PATH:/home/user/bin

ist die richtige Methode, Man sollte PATH voran stellen, NICHT anhängen.

PATH=/home/user/bin:$PATH

ist falsch. Warum?

Wenn man ein Befehl in der Shell eingibt, dann wird üblicherweise die Path Variable in der Angegebenen Reihenfolge durchsucht nach dem Befehl. Sobald die erste Fundstelle gefunden wird, wird dann dort das Skript/Befehl/etc. ausgeführt.

Stellt euch vor ihr schreibt ein Skript das "firefox" heißt, oder sonst irgendeinen anderen befehl. Wenn Ihr euren Pfad als erstes Voranschreibt dann wird letztendlich das Skript in "/home/user/bin" ausgeführt. Und nicht mehr der Firefox Befehl den ihr erwartet. Also letztendlich den Browser öffnen.

Wenn ihr euren Pfad hinten anhängt, dann werden erst alle Systempfade und dann eurer eigenes Verzeichnis ausgeführt. Das hat halt den Vorteil das ihr keine Systembefehle überschreiben könnt. firefox führt also immer firefox aus, und niemals euer eigenen Befehl. Die hier angegebene Methode kann unter Umständen zu richtigen Problemen führen.

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20095

Wohnort: Schwabenländle

@dehru: Also bei PATH sind die geschweiften Klammern aber unnötig. Wegen Leerzeichen werde ich das mal testen...

Gruß, Dee

dehru Team-Icon

Ehemalige
Avatar von dehru

Anmeldungsdatum:
2. Oktober 2005

Beiträge: 2178

Wohnort: Stuttgart

Dee hat geschrieben:

@dehru: Also bei PATH sind die geschweiften Klammern aber unnötig. Wegen Leerzeichen werde ich das mal testen...

Klar, da hast du recht. In diesem Fall ist es wirklich unnötig und kann weggelassen werden.
Es sit ja nun mal so, dass ich mir angewöhnt habe, grundsätzlich ${VARIABLE} zu verwenden. So kann ich es nicht vergessen, wenn es notwendig ist.

hartl_vienna

Avatar von hartl_vienna

Anmeldungsdatum:
6. Mai 2005

Beiträge: 275

Wohnort: Wien

@Sid Burn:

PATH=/home/user/bin:$PATH

ist eigentlich nicht falsch. Man sollte bei der Benennung von Scripten halt darauf achten, dass der Name nicht schon vergeben ist.
Mit

which -a

bzw.

type -a

kann man einen Irrtum durchaus ausschließen.

Deine Variante

PATH=$PATH:/home/user/bin

ist halt die sichere.

Daher habe ich es bei mir sogleich geändert. Danke für den Hinweis!

Antworten |