Was ist $PATH
?
Wie kann ich Befehle / Programme haben, die nur für mich verfügbar sind?
Ich habe diesen bereits ~/bin
erwähnten Pfad gesehen , aber wofür wird er verwendet und wie verwende ich ihn?
Was ist $PATH
?
Wie kann ich Befehle / Programme haben, die nur für mich verfügbar sind?
Ich habe diesen bereits ~/bin
erwähnten Pfad gesehen , aber wofür wird er verwendet und wie verwende ich ihn?
Antworten:
$ PATH ist eine Umgebungsvariable, die zum Nachschlagen von Befehlen verwendet wird. Das ~ ist Ihr Ausgangsverzeichnis, also ist ~ / bin / home / user / bin; Es ist ein normales Verzeichnis.
Wenn Sie beispielsweise "ls" in einer Shell ausführen, führen Sie tatsächlich das Programm / bin / ls aus. Der genaue Speicherort kann je nach Systemkonfiguration abweichen. Dies geschieht, weil sich / bin in Ihrem $ PATH befindet.
So können Sie den Pfad anzeigen und feststellen, wo sich ein bestimmter Befehl befindet:
$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls # searches $PATH for an executable named "ls"
/bin/ls
$ ls # runs /bin/ls
bin desktop documents downloads examples.desktop music pictures ...
$ /bin/ls # can also run directly
bin desktop documents downloads examples.desktop music pictures ...
Um Ihr eigenes privates bin-Verzeichnis zu haben, müssen Sie es nur zum Pfad hinzufügen. Bearbeiten Sie dazu ~ / .profile (eine versteckte Datei), um die folgenden Zeilen einzuschließen. Wenn die Zeilen kommentiert sind, müssen Sie sie nur auskommentieren. wenn sie schon da sind, bist du fertig!
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
Jetzt müssen Sie Ihr ~ / bin-Verzeichnis erstellen. Da .profile bei der Anmeldung ausgeführt wird und nur ~ / bin hinzufügt, wenn es zu diesem Zeitpunkt vorhanden ist, müssen Sie sich erneut anmelden, um den aktualisierten PFAD anzuzeigen.
Lass es uns testen:
$ ln -s $(which ls) ~/bin/my-ls # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls # lookup through $PATH
bin desktop documents downloads examples.desktop music pictures ...
$ ~/bin/my-ls # doesn't use $PATH to lookup
bin desktop documents downloads examples.desktop music pictures ...
type
sehen, wie ein tatsächlicher Befehl von der Shell aufgelöst wird. Beispiel: which echo
und type echo
meldet verschiedene Dinge, which
gibt '/ bin / echo' zurück, aber 'type' gibt zurück, dass es sich um eine eingebaute Shell handelt, die die Shell der Datei in '/ bin' vorziehen wird.
which
wird besser durch type
oder command
in interaktiven Shells ersetzt und ist in Skripten völlig nutzlos.
$HOME
Variable in $PATH
aus irgendeinem Grund funktioniert nicht, dh man muss ~
stattdessen Zeichen verwenden.
In Bezug auf ~/bin
und Befehle / Programme nur für Ihren Benutzer verfügbar
Neuere Ubuntu-Versionen enthalten das ~/bin
Verzeichnis in Ihrem Verzeichnis $PATH
, jedoch nur, wenn das ~/bin
Verzeichnis vorhanden ist.
Wenn es nicht existiert:
Stellen Sie sicher, dass Ihre ~/.profile
folgende Zeilengruppe enthält (die Standardeinstellung ist ~/.profile
bereits vorhanden):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Erstellen Sie das ~/bin
Verzeichnis:
mkdir -p ~/bin
Starten Sie Ihren Computer neu oder erzwingen Sie das erneute Lesen von Bash ~/.profile
:
exec -l bash
exec -l bash
" -Tipp. Was macht die -l
Flagge? Ich finde keine Erklärung in man exec
.
exec -l
wird bash als Login-Shell ausführen [ wiki.bash-hackers.org/commands/builtin/exec] . Kurz gesagt, es zwingt Bash, neu zu lesen /etc/profile
und ~/.profile
. Nur ausgeführt exec bash
wird nur neu gelesen ~/.bashrc
.