Verständnisfrage PATH global ändern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Verständnisfrage PATH global ändern

Beitrag von raina » 11.07.2005 11:57:58

Laut verschiedener Dokumentationen wird die PATH- Variable in /etc/profile festgelegt und evtl. durch PATH- Einträge in /etc/bash.bashrc, ~/bash_profile, ~/bashrc, ~/.profile überschrieben.
Ich habe den PATH in /etc/profile um ein Verzeichnis erweitert. In keinem der anderen Verzeichnisse wird die PATH- Variable geändert. Selbst nach einem reboot wird der neue PATH nicht berücksichtigt, weder im Gnome- Terminal noch in der Konsole.

Code: Alles auswählen

echo $PATH
und

Code: Alles auswählen

set|grep PATH
geben nur den alten unveränderten PATH aus.
Wie kann ich überprüfen, ob /etc/profile überhaupt eingelesen wird, bzw. wo könnte sie noch eingelesen oder überschrieben werden?

Mir ist bekannt, daß es Workarounds durch Einträge in den erwähnten Dateien unter ~ gibt!

PS: Mit export kann ich die Variable für die aktuelle Sitzung ändern.
Wo wird das gespeichert?
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Beitrag von HELLinG3R » 11.07.2005 13:02:19

Zumindest auf deine letzte Frage kann ich dir antworten:

es wird im Hauptspeicher gespeichert und verfällt mit der beendigung der Shell.

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 11.07.2005 13:04:30

Zum Beispiel so in der

Code: Alles auswählen

.bash_profile

Code: Alles auswählen

PATH=/tmp:"${PATH}"

Als Beispiel. Was man allerdings nicht machen solte , das /tmp Verzeichnis in den Pfad aufzunehmen.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Beitrag von raina » 11.07.2005 13:13:00

Ich frag mich (und also Euch) nur, wieso es dieses komische /etc/profile überhaupt gibt, wenn es doch scheinbar nicht benutzt wird. Außerdem muß doch die Belegung der PATH- Variablen irgendwo stattfinden.
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 11.07.2005 13:32:23

Die Dateien werden schon ausgewertet. Es gibt eine festgelegte Reihenfolge. Und dann kommt es darauf an , ob ich eine Anmeldeshell oder eine Interaktive Shell habe. Und KDE Gnome usw. ist immer eine Interaktive Shell.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

rall0r
Beiträge: 123
Registriert: 20.05.2005 09:33:48

Beitrag von rall0r » 11.07.2005 16:24:12

Hi,
was ist denn da genau der Unterschied zwischen einer Anmeldeshell und einer interaktiven Shell?
Gruß und Danke,
Ralf
apt-get moo
wer denkt sich soetwas aus? :)

Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Beitrag von raina » 12.07.2005 12:49:19

rall0r hat geschrieben:was ist denn da genau der Unterschied zwischen einer Anmeldeshell und einer interaktiven Shell?
nicht interaktiv ist z.B.eine Shell, die Du aufrufst, um ein Skript abzuarbeiten. z.B.:

Code: Alles auswählen

sh ./configure
Weil Du da fast nicht mehr interagieren kannst, kill vielleicht mal ausgenommen. Interaktiv ist z.B. ein geöffnetes Terminal, welches Dich mit seinem freundlichen Eingabeprompt zur Interaktion einlädt :->
Korrigiert mich, wenn ich das falsch verstanden habe.

Nichtsdestoweniger verrät mir das man zur bash sogar die Reihenfolge in der die einzelnen Konfigurationsfiles abgearbeitet werden (sollten). In keiner der auf meinem System vorhandenen wird die PATHvariable neu belegt. Wieso also wird der erweiterte PATH nicht von meiner Bash zur Kenntnis genommen? Ist das Manual veraltet und es gibt neue nicht dokumentierte Konfigurationsdateien? Verschwörung? Sabotage? Opus Dei? NSA? Außerirdische? Mikro$oft?
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 12.07.2005 13:41:07

Ich war da ein bischen ungenau.

Der Unterschied von interaktiv zu nicht inteaktiv ist. eine interaktive Shell ist mit einen tty verbunden , also Bildschirm. Eine nicht iinteraktive macht keine Bilschirmausgaben. Hat nur die Möglichkeit, Fehlermeldungen usw in Logfiles zu schreiben. Und reden eigentlich von Login Shells und nicht Loginshells. Eine Loginshell ist das wenn ich mich an der Konsole anmelde mit User und Passwort. Ein nicht Loginshell wäre wenn ich im KDE/Gnome eine Shell öffne. oder innerhalb einer Loginshell auf der Konsole eine Zweite Shell starte. Die meisten haben als Standard die Bash , also bash am Kommandprompt eintippe.


Für Loginshells ist Datei /etc/profile und .bash_profile im jeweiligen Homeverzeichnis zuständig. Für nicht Loginshells die Datein /etc/bash.bashrc und die ,bashrc im jeweiligen Homeverzeichnis des Users.

Eine Loginshell beachtet normalerweise die .bashrc nicht. Oder ich muß dazu veranlassen es zu tun

Code: Alles auswählen

     15 #include .bashrc if it exists
     16 if [ -f ~/.bashrc ]; then
     17    . ~/.bashrc



Hoffe das es klarer wird und nichts durcheinandergewürfelt habe.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Beitrag von raina » 12.07.2005 16:38:14

Code: Alles auswählen

$ man bash
...
INVOCATION
...
       When  bash is invoked as an interactive login shell, or as a non-inter-
       active shell with the --login option, it first reads and executes  com-
       mands  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.
...
       When an interactive shell that is not a login shell  is  started,  bash
       reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
       these files exist.  This may be inhibited by using the  --norc  option.
...
       When invoked as an interac-
       tive login shell, or a non-interactive shell with the  --login  option,
       it  first  attempts  to read and execute commands from /etc/profile and
       ~/.profile, in that order.  The  --noprofile  option  may  be  used  to
       inhibit  this  behavior.
...
Wobei bei mir die Namen etwas abweichen:

Code: Alles auswählen

$ ls -a |grep bash
.bash_history
.bash_profile
.bashrc

$ ls -a |grep pro
.bash_profile

Code: Alles auswählen

$  cat .bash_profile |grep -v \#


if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Code: Alles auswählen

$  cat .bashrc |grep -v \#

[ -z "$PS1" ] && return


shopt -s checkwinsize

if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto'
fi


if [ -z "$debian_chroot" -a -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

case "$TERM" in
xterm-color)
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    ;;
*)
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    ;;
esac


case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
    ;;
*)
    ;;
esac

Nix PATH!
:?: :cry: :?:
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 12.07.2005 16:45:34

So habe ich das gelöst.

/etc/profile

Code: Alles auswählen

      1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
      2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
      3 CATALINA_BASE=/usr/share/tomcat4/
      4 export CATALINA_BASE
      5
      6 if [ "`id -u`" -eq 0 ]; then
      7   PATH="/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"
      8 else
      9   PATH="/opt/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
     10 fi
     11
     12 if [ "$PS1" ]; then
     13   if [ "$BASH" ]; then
     14     PS1='\u@\h:\w\$ '
     15   else
     16     if [ "`id -u`" -eq 0 ]; then
     17       PS1='# '
     18     else
     19       PS1='$ '
     20     fi
     21   fi
     22 fi
     23
     24 export PATH
     25
     26 umask 022
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Beitrag von raina » 12.07.2005 18:15:44

Code: Alles auswählen

$ cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/openoffice2/program/"
fi

if [ "$PS1" ]; then
  if [ "$BASH" ]; then
    PS1='\u@\h:\w\$ '
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

export PATH

umask 022
aber:

Code: Alles auswählen

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
kein openoffice im PATH :cry:
Wie gesagt, mir ist klar,daß es einfache workarounds gibt, aber ich will eigentlich verstehen, was das vor sich geht. Sonst kann ich auch zu Windoze wechseln, da funktioniert doch vieles auch "irgendwie".
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 12.07.2005 19:35:54

Als welcher User ? Welche bash verwendest du?
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Beitrag von raina » 12.07.2005 20:06:13

KBDCALLS hat geschrieben:Als welcher User ? Welche bash verwendest du?
als normaler user (nichtroot), worauf das "$" schon hindeutet
in der 32bit chroot Umgebung:

Code: Alles auswählen

 $ bash --version
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.
bzw. unter AMD64:

Code: Alles auswählen

$ bash --version
GNU bash, version 2.05b.0(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.
aber das ganze hab ich genauso auf einem reinen 32bit System, da hab ich denselben Eintrag zugefügt und er wird ebenfalls nicht erkannt.
PS: Funktioniert das eigentlich bei Irgendwem? Kann das mal jemand bei sich testen z.B. ein neues directory /test anlegen, in /etc/profile in den PATH aufnehmen und schauen ob's erkannt wird?kann doch nicht sein, das ich hier die einzigen buggy versions haben sollte.
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 12.07.2005 22:48:39

Mit einer Debian Sid die die Bash 3.0 funktioniert das. Habe den KDE laufen. Falls du Gnome benutzt sieh dir mal die Konfigdatei des GDM an. Aber wieso muß eigentlich der Pfad gesetzt werden? Openoffice läuft auch so.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 12.07.2005 23:11:15

Da war schon jemand schneller, heute Morgen.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
raina
Beiträge: 206
Registriert: 10.02.2004 18:29:42
Wohnort: Berlin

Beitrag von raina » 13.07.2005 15:09:50

Oops, hab jetzt ein wenig rumexperimentiert, wenn man die Shell mit --login aufruft taucht der neue PATH auf.
Gibt's eigentlich die Möglichkeit chroot einen Parameter login mitzugeben mein man schweigt sich leider darüber aus,
KBDCALLS hat geschrieben: Aber wieso muß eigentlich der Pfad gesetzt werden? Openoffice läuft auch so.
Die Startdatei liegt nicht im ursprünglichen PATH, wenn ich einfach nur soffice an do_chroot übergebe, wird es nicht gefunden.

BESTEN DANK

raina

@ rall0r: Hab zur Loginshell folgendes rausgefunden:
Loginshells werden beim Loginprozeß vom Programm login aufgerufen, nachdem Du Name und Password an der Konsole eingegeben hast sie und verifiziert worden sind.
Sie unterscheiden sich von Nichtloginshells an den beim Start eingelesenen Dateien. Beim Netzwerk-Login (also auch X) wird statt einer Loginshell der Dämon inetd gestartet, bei dem Du dann eine Terminalemulation anfordern kannst, die dann als Nichtloginshell gestartet wird. Du kannst das Einleseverhalten einer Loginshell emulieren, wenn Du z.B. mit bash --login in eine neue Shell wechselst.
Debian kaputt?
http://www.debianforum.de
Windows kaputt?
Hotline: 0180 5 67 23 30 (Support-Anfragen werden mit 75,00 € + MwSt. pro Anfrage berechnet)

Vego
Beiträge: 5
Registriert: 22.01.2005 22:43:14
Wohnort: Berlin
Kontaktdaten:

Beitrag von Vego » 13.07.2005 16:18:43

raina hat geschrieben:Oops, hab jetzt ein wenig rumexperimentiert, wenn man die Shell mit --login aufruft taucht der neue PATH auf.
Genau das war ja auch zu erwarten, wie du selbst ja schon gepostet hast:

Code: Alles auswählen

[snip]
...
       When an interactive shell that is not a login shell  is  started,  bash
       reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
       these files exist.  This may be inhibited by using the  --norc  option.
... 
[snip]
Wie also die manpage zur Bash schon sagt, wird /etc/profile bei einer interaktiven _nicht_ login shell überhaupt nicht angeschaut, sondern stattdessen /etc/bash.bashrc ausgelesen. Du musst also für deine Änderungen an $PATH den eintrag in /etc/bash.bashrc setzen oder aber dort /etc/profile auslesen lassen. (Ist also kein workaround, sondern beabsichtigt.)

Zu der andern Frage kann ich grad leider nichts sagen, aber das sollte dein Problem lösen.
Abi 05!

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 13.07.2005 17:24:48

Bei steht Openoffice komplett in

Code: Alles auswählen

/opt/openoffice.org1.9.100/
und

Code: Alles auswählen

/opt/openoffice.org1.9.79/
und starte beide Versionen ohne irgeneine Pfadangabe. Sogar parallel. Muß nur das Programm mit dem vollen Pfad starten. Habe übriegens die RPM Pakete installiert.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Antworten