Umgebungsvariable $PATH

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Umgebungsvariable $PATH

Beitrag von raa » 08.08.2016 11:31:04

Hi,

ich will an meine $PATH noch was dranhängen und das systemweit verfügbar machen. Im Moment sieht die so aus:

Code: Alles auswählen

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Erst mal fand ich nur Hinweise auf eine "/etc/environment", aber die gibt's hier gar nicht (jessie). Dann hab' ich den Tipp "üblicherweise ~/.profile (per User) bzw. /etc/profile (global)" gekriegt. Hm, in der /etc/.profile stehen die Variablen zwar, wie ich sie sehe:

Code: Alles auswählen

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

export PATH
So weit, so gut, aber wenn ich da was ändere, macht sich das System absolut nichts draus. Auch nicht aus dem, was in meiner ~/.profile steht:

Code: Alles auswählen

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
Genau so will ich's haben (hab' mir nämlich genau dieses Verzeichnis angelegt, wo diverse Scripte stehen). Und warum macht er das nicht, also warum fass er die ~/.profile gar nicht an? (DIe /etc/.profile auch nicht, wie gesagt - hab' probeweise sogar mal alles auskommentiert und neu gebootet - die Variablen sind wie gehabt.)

Und der export - Befehl funktioniert auch nicht so, wie er soll. Wenn ich eine Variable exportiere, ist sie in einer anderen Shell noch lange nicht zu sehen. In einer Subshell schon, aber nur da. Ist das also eine prinzipielle Einstellung im System, die ich ändern muss? Wo wird $PATH nun wirklich gesetzt und exportiert?

Danke im voraus für gute Hinweise.

uname
Beiträge: 12474
Registriert: 03.06.2008 09:33:02

Re: Umgebungsvariable $PATH

Beitrag von uname » 08.08.2016 11:35:24

Warum kopierst du deine Scripte nicht einfach nach /usr/local/bin wo sie hingehören? Für z.B. root die Variable $PATH zu ändern wäre keine gute Idee. Vor allem wenn ein normaler Benutzer auch noch Schreibrechte auf das Verzeichnis hat.

guennid

Re: Umgebungsvariable $PATH

Beitrag von guennid » 08.08.2016 11:45:21

Warum kopierst du deine Scripte nicht einfach nach /usr/local/bin wo sie hingehören?
Find' ich nicht, dass die dahin gehören. :wink: Skripte, die nur ich (als User) benutze, stehen bei mir auch in einem Skriptverzeichnis im home dieses Benutzers: Ein Verzeichnis weniger, das ich beim Sichern im Kopf haben sollte. - Aber 'nen Link dahin, den leg' ich auch unter /usr/local/bin an. :wink:

Grüße, Günther
Zuletzt geändert von guennid am 08.08.2016 12:02:35, insgesamt 1-mal geändert.

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: Umgebungsvariable $PATH

Beitrag von raa » 08.08.2016 11:52:20

uname hat geschrieben:Warum kopierst du deine Scripte nicht einfach nach /usr/local/bin wo sie hingehören?
Naja, das ist nun Ansichtssache. Aus meiner Sicht gehören private Basteleien in mein $HOME/bin. :wink:
uname hat geschrieben:Für z.B. root die Variable $PATH zu ändern wäre keine gute Idee. Vor allem wenn ein normaler Benutzer auch noch Schreibrechte auf das Verzeichnis hat.
Das ist ja nun Quatsch. Root darf eh' alles. Aber des Rätsels Lösung ist ganz einfach:
Christoph 'Mehdorn' Weber (NG.'at.linux') hat geschrieben:Falls du unter X unterwegs bist und Terminal-Emulatoren benutzt, sind das meistens keine Login-Shells und die lesen ~/.profile gar nicht ein, sondern ~/.bashrc. (Vorausgesetzt, du nutzt die Bash.)
Hab' die Zeilen also in meine ~/.bashrc eingetragen - das war's

raa
Beiträge: 411
Registriert: 19.12.2013 10:16:19

Re: Umgebungsvariable $PATH

Beitrag von raa » 08.08.2016 11:57:52

guennid hat geschrieben:Ein Verzeichnis weniger, das ich beim Sichern im Kopf haben sollte.
Brauch' ich nicht im Kopf zu haben, das macht mein Backup selber. :wink:

Code: Alles auswählen

srcDir=/snap						# Quellverzeichnis Snapshot
sysbckRootDir=/mnt/backup/Systems	# Wurzel-Verzeichnis für alle System-Backus

cd /$srcDir &2>/dev/zero; rc=$?; cd /
if  [ $rc == 0 ]; then 
	echo 'Erst mal den alten Snapshot löschen:'
	btrfs sub del /snap
fi
echo Ok

echo; echo 'Snapshot erstellen:' 
btrfs sub snap / /snap; errCancel $?

echo; echo 'Und ein bisschen aufräumen ...'
find $srcDir -type f -name '*~' -exec trash {} \; 
find $srcDir -wholename '*/thumbnails/*' -exec trash {} \;
find $srcDir -type f -wholename '*/Cache/*' -exec trash {} \;
find $srcDir -name '*.log' -exec trash {} \;

echo; echo Backup mounten:
mount /mnt/backup
echo Ok

bckDir=$sysbckRootDir/linux			# Zielverzeichnis Backup System

echo; echo Backup Snapshot ...
rsync -av --progress --delete $srcDir/ $bckDir; errCancel $?

echo; echo 'Ok, Snapshot löschen' 
btrfs sub del $srcDir; errCancel $?

srcDir=$bckDir						# Quellverzeichnis Backup System
bckDir=/opt/linux-rescue			# Zielverzeichnis Rettungssystem
echo; echo Rettungssystem mounten
mount $bckDir	 
echo Ok

echo; echo Rettungssystem aktualisieren

rsync -av --progress --delete --exclude /opt $srcDir/ $bckDir

echo '*** Rettungssystem ok  ***' 

echo; echo Rettungssystem ausklinken
umount -v /opt/linux-rescue; errCancel $?

# trash-empty

beep; echo; echo '*** OK! Gelöschte Dateien findest du im Müll ***'

exit 0
Läuft exakt eine Minute. :wink:

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Umgebungsvariable $PATH

Beitrag von Meillo » 08.08.2016 12:14:26

raa hat geschrieben: ich will an meine $PATH noch was dranhängen und das systemweit verfügbar machen.
Das war erstmal neutral formuliert. Das es sich um Spielereien (~/bin) oder ``normale'' selbstinstallierte Software (/usr/local/bin) handeln koennte, sind Vermutungen.

Ein Beispiel fuer einen Fall, bei dem keines von beidem passt ist der Mailclient mmh, der aus einer Toolchest aus knapp 50 Programmen besteht. Weil diese aus historischen Gruenden so allgemeine Namen wie `folder', `mark', `pick', `show' oder `send' haben, und damit recht wahrscheinlich mit selbstgeschriebenen Programmen der User kollidieren, werden sie nicht nach /usr/local/bin installiert sondern nach /usr/local/mmh/bin installiert. Diejenigen User eines Systems, die mmh verwenden, koennen dieses Verzeichnis dann -- je nach Praeferenz -- vorne oder hinten in den Pfad setzen. Und auf manchen Systemen wuerde man es auch standardmaessig allen Nutzern in den Pfad packen, aber ihnen doch die Moeglichkeit geben wollen, die mmh-Suite aus dem Pfad zu entfernen ...

Natuerlich ist nicht gesagt, dass der Fragend gerade so einen Sonderfall hat, und es macht Sinn, ihm ueblichere Alternativen vorzuschlagen ... aber bitte in vorschlagendem Tonfall. ;-)
Use ed once in a while!

pferdefreund
Beiträge: 3799
Registriert: 26.02.2009 14:35:56

Re: Umgebungsvariable $PATH

Beitrag von pferdefreund » 09.08.2016 07:42:01

Ich mache es oft so, dass ich selbstgeschriebene oder compilierte Software nach /usr/local/meinprogramm installiere. Dann ist die Deinstallation per remove /usr/local/meinprogramm ein Klacks. Insbesondere, wenn man den Ordner - nur für die Installation auf den eigenen User bringt. Dann ist man auch sicher, das nix sonstwo im System landet und der rm -r /usr/local/meinprogramm entsorgt dann absolut zuverlässig.

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Umgebungsvariable $PATH

Beitrag von wanne » 09.08.2016 10:17:28

Deine /etc/profile wird einmal beim Login ausgeführt. Danach wird die Umgebung an jede weitere Subshell weitergegeben. Nach oben hin nachträglich durchpropagieren geht nicht. (Oder nur mit üblen Hacks über /proc oder kmem.)
Ein mal ausloggen und wieder einloggen und es hat sich erledigt. Oder in die .bashrc schreiben. Die wird bei jedem Start einer neuen Bash ausgeführt. (Aber eben nur der bash. Nimmst du die dash ist das da nicht drin.)
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten