Was ist $PATH?
Wie kann ich Befehle / Programme haben, die nur für mich verfügbar sind?
Ich habe diesen bereits ~/binerwä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 ~/binerwä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 ...
typesehen, wie ein tatsächlicher Befehl von der Shell aufgelöst wird. Beispiel: which echound type echomeldet verschiedene Dinge, whichgibt '/ 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.
whichwird besser durch typeoder commandin interaktiven Shells ersetzt und ist in Skripten völlig nutzlos.
$HOMEVariable in $PATHaus irgendeinem Grund funktioniert nicht, dh man muss ~stattdessen Zeichen verwenden.
In Bezug auf ~/binund Befehle / Programme nur für Ihren Benutzer verfügbar
Neuere Ubuntu-Versionen enthalten das ~/binVerzeichnis in Ihrem Verzeichnis $PATH, jedoch nur, wenn das ~/binVerzeichnis vorhanden ist.
Wenn es nicht existiert:
Stellen Sie sicher, dass Ihre ~/.profilefolgende Zeilengruppe enthält (die Standardeinstellung ist ~/.profilebereits 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 ~/binVerzeichnis:
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 -lFlagge? Ich finde keine Erklärung in man exec.
exec -lwird bash als Login-Shell ausführen [ wiki.bash-hackers.org/commands/builtin/exec] . Kurz gesagt, es zwingt Bash, neu zu lesen /etc/profileund ~/.profile. Nur ausgeführt exec bashwird nur neu gelesen ~/.bashrc.