Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Mag. Leonhard Landrock
Hallo!

Kann mir jemand erklären, worauf ein unterschiedliche Ergebnis der beiden 
Befehle beruhen kann?

Anders gefragt:

Wer verwendet die $PATH Variable, die von einem echo in einer 
normalen bash ausgegeben wird und wer verwendet env?

MfG,
Leonhard.

PS: Mir geht es dabei insbesondere um dpkg da mein Problem (vgl. 
E-Mail debconf: apt-extracttemplates failed: Bad file descriptordpkg: dpkg - 
error: PATH is not set.) noch ungelöst ist.



Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Wolf Wiegand
Hallo,

Mag. Leonhard Landrock wrote:

 Kann mir jemand erklären, worauf ein unterschiedliche Ergebnis der beiden 
 Befehle beruhen kann?

Variablen (bei Dir: PATH) können entweder nur für die aktuelle Shell
gelten, oder aber exportiert werden, womit sie auch für Programme
gesetzt sind, die über die Shell gestartet werden:

[EMAIL PROTECTED]:~ $ FOO=bar
[EMAIL PROTECTED]:~ $ echo $FOO
bar
[EMAIL PROTECTED]:~ $ env | grep FOO
[EMAIL PROTECTED]:~ $ export FOO=bar
[EMAIL PROTECTED]:~ $ env | grep FOO
FOO=bar

hth, Wolf
-- 
Büroschimpfwort des Tages: Fallschirmspringer - Kollege, der in ein (eher 
informelles) Gespräch hineinplatzt, keine Sekunde abwartet und seinen Senf 
abgibt. (Thomas Schmidt-Hebbel)


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Thorsten Haude
Moin,

* Mag. Leonhard Landrock wrote (2006-06-25 19:27):
Kann mir jemand erklären, worauf ein unterschiedliche Ergebnis der beiden 
Befehle beruhen kann?

Ist es denn unterschiedlich? Hast Du mal ein Beispiel?


Wer verwendet die $PATH Variable, die von einem echo in einer 
normalen bash ausgegeben wird und wer verwendet env?

Ich würde mich wundern, wenn ein Prozeß den Pfad ermittelt, indem er
etwa im Output von env(1) 'rumgrept. Die Frage ist eher, warum $PATH
unterhalb von env einen anderen Wert hat.


Thorsten   The Arcade Fire: Crown Of Love
-- 
He that would make his own liberty secure, must guard even
his enemy from oppression; for if he violates this duty,
he establishes a precedent which will reach to himself.
- Thomas Paine


pgpkgYfFPROuy.pgp
Description: PGP signature


Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Mag. Leonhard Landrock
Am Sonntag, 25. Juni 2006 19:32 schrieb Wolf Wiegand:
 Hallo,

 Mag. Leonhard Landrock wrote:
  Kann mir jemand erklären, worauf ein unterschiedliche Ergebnis der beiden
  Befehle beruhen kann?

 Variablen (bei Dir: PATH) können entweder nur für die aktuelle Shell
 gelten, oder aber exportiert werden, womit sie auch für Programme
 gesetzt sind, die über die Shell gestartet werden:

 [EMAIL PROTECTED]:~ $ FOO=bar
 [EMAIL PROTECTED]:~ $ echo $FOO
 bar
 [EMAIL PROTECTED]:~ $ env | grep FOO
 [EMAIL PROTECTED]:~ $ export FOO=bar
 [EMAIL PROTECTED]:~ $ env | grep FOO
 FOO=bar

Danke, damit komme ich der Sache schon viel näher.

Heißt das somit, dass env immer nur die Variablen liefert, die auch 
exportiert worden sind?

Völlig offen ist für mich aber auch noch die Frage, wie den nun die normale 
Einstellung (d.h. nach einer kleinen Installation) für die PATH-Variable 
unter dem Konto root ist.

Seit heute macht mir dpkg Probleme. Tatsächlich lieggt es offensichtlich an 
dem fehlenden Export der PATH-Variable.

Frage: Sollte die PATH-Variable unter dem Konto root normalerweise 
exporteirt werden? Wenn ja, wo sollte das eingetragen sein?

MFG,
Leonhard.



Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Thorsten Haude
Moin,

* Wolf Wiegand wrote (2006-06-25 19:32):
Variablen (bei Dir: PATH) können entweder nur für die aktuelle Shell
gelten, oder aber exportiert werden, womit sie auch für Programme
gesetzt sind, die über die Shell gestartet werden:

Guter Gedanke. Da würde ich mal nach PATHs suchen, die geändert, aber
nicht exportiert werden.


[EMAIL PROTECTED]:~ $ export FOO=bar

(Oder auch: 'export foo')


Thorsten  The Arcade Fire: No Cars Go
-- 
Es gibt Dinge, für die es sich lohnt, eine kompromißlose Haltung einzunehmen.
- Dietrich Bonhoeffer


pgpORNalX3Pq2.pgp
Description: PGP signature


Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Thorsten Haude
Moin,

* Mag. Leonhard Landrock wrote (2006-06-25 19:48):
Heißt das somit, dass env immer nur die Variablen liefert, die auch 
exportiert worden sind?

Plus die, die Du in env selbst änderst.


Völlig offen ist für mich aber auch noch die Frage, wie den nun die normale 
Einstellung (d.h. nach einer kleinen Installation) für die PATH-Variable 
unter dem Konto root ist.

Mit normal meinst Du wie von Debian gewünscht?


Frage: Sollte die PATH-Variable unter dem Konto root normalerweise 
exporteirt werden? Wenn ja, wo sollte das eingetragen sein?

Nein, wie alles andere solltest Du einen Export nur machen, wenn Du
ihn brauchst. Ansonsten kannst Du den Befehl ja auch mit env starten
und nur dort den Pfad ändern.


Thorsten   The Arcade Fire: Haiti
-- 
Das Briefgeheimnis sowie das Post- und Fernmeldegeheimnis sind unverletzlich.
- Grundgesetz, Artikel 10, Abs. 1 


pgpPCvYwL0zkh.pgp
Description: PGP signature


Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Wolf Wiegand
Hallo,

Mag. Leonhard Landrock wrote:

 Heißt das somit, dass env immer nur die Variablen liefert, die auch 
 exportiert worden sind?

Eigentlich ist env dafür da, Programme zu starten und denen dabei eine
andere Umgebung (geänderte Variablen) mitzugeben. Wenn env 'einfach so'
gestartet wird, wird ausgegeben, welche Variablen für das zu startende
Programm gültig wären (siehe man 1 env). Insofern: Ja, das, was env
ausgibt, gilt auch für Programme, die Du in der Shell startest.

 Völlig offen ist für mich aber auch noch die Frage, wie den nun die normale 
 Einstellung (d.h. nach einer kleinen Installation) für die PATH-Variable 
 unter dem Konto root ist.

Hier auf einer neuen Sarge-Installation:

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin

 Frage: Sollte die PATH-Variable unter dem Konto root normalerweise 
 exporteirt werden?

Ja.

 Wenn ja, wo sollte das eingetragen sein?

Ich würde jetzt sagen, /etc/profile (Auszug):

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
fi

(Und hier komme ich ins Schwimmen, denn das stimmt nicht mit dem Überein,
was das 'echo $PATH' weiter oben zurückgegeben hat.)

Am besten selbst mal den Abschnitt 'INVOCATION' aus der manpage zu bash lesen. 

hth, Wolf
-- 
Büroschimpfwort des Tages: Süßigkeitenkistenverwalter - weisen Kollegen darauf 
hin, dass sie schon zweimal an der Box mit den Süßigkeiten im Labor oder Büro 
waren. (Jan Topel)


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Unterschied zwischen echo $PATH und env | grep $PATH

2006-06-25 Diskussionsfäden Mag. Leonhard Landrock
Am Sonntag, 25. Juni 2006 20:03 schrieb Wolf Wiegand:
 Hallo,

 Mag. Leonhard Landrock wrote:
  Völlig offen ist für mich aber auch noch die Frage, wie den nun die
  normale Einstellung (d.h. nach einer kleinen Installation) für die
  PATH-Variable unter dem Konto root ist.

 Hier auf einer neuen Sarge-Installation:

 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/
bin

  Frage: Sollte die PATH-Variable unter dem Konto root normalerweise
  exporteirt werden?

 Ja.

  Wenn ja, wo sollte das eingetragen sein?

 Ich würde jetzt sagen, /etc/profile (Auszug):

 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
 fi

 (Und hier komme ich ins Schwimmen, denn das stimmt nicht mit dem Überein,
 was das 'echo $PATH' weiter oben zurückgegeben hat.)

 Am besten selbst mal den Abschnitt 'INVOCATION' aus der manpage zu bash
 lesen.

 hth, Wolf

Auszug aus der bash man-page:

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.

Meine /etc/profile Datei:

# /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
fi

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

export PATH

umask 022

Auszug aus meiner ~/.bash_profile für den Benutzer root:

Nein! Das kann ich hier nicht posten. ;-)

OK, jetzt weiß ich wo der Hund begraben liegt. Ein fehlgeschlagenes Linux 
from Scratch experimentieren. Meine ~/.bash_profile ist gelinde gesagt 
Schrott. :-)

Der Tipp Am besten selbst mal den Abschnitt 'INVOCATION' aus der manpage zu 
bash lesen. war Gold wert.

Danke und lG,
Leonhard.