Dieses Skript verwendet tree
...
sudo apt-get install tree
Sie können die Tiefe von Verzeichnissen durch Ändern ändern -L 1
und auswählen, ob ~/
...
UPDATE 2 :
.. hat das Skript so geändert, dass nur ein führender / home / user / (nicht "any") ersetzt wird
.. und Argumente hinzugefügt ..
UPDATE Check hinzugefügt: .. Füge kein Verzeichnis zu PATH hinzu, wenn es bereits in PATH ist. Bei dieser Prüfung werden '~ /' und '/ home / user /' als unterschiedlich angesehen.
Zu Ihrer Frage 1 ... ja, es ist wahr; Jedes spezifische Verzeichnis muss im PATH einzeln spezifiziert werden.
Zu Ihrer Frage 2 ... Hier ist ein Skript, das macht, was Sie wollen.
Ich habe es getestet, aber so wie es aussieht, wird es den neuen PFAD für die aktuelle Sitzung erstellen.
Um es dauerhaft zu machen, können Sie es verwenden export PATH
(aber Ich bin ein bisschen skizzenhaft in den Details von export
)
#
# name: path-add-dirs
# eg: $ path-add-dirs "$HOME/bin" "tilde" 1
# When directories are $HOME based, choose format.
# Add directories in tidle format: ~/...
# ...or as fullly-qualified: /home/user/...
# mode values: "tilde", or anything else for fully-qualified
mode="$2" # valid mode values: "tilde", or anything else
maindir="$1"; dirs= ; echo
# Buld string of subdirectories to a depth/level of 1
while IFS= read -r dir ; do
# Don't add directory if it is already in PATH
if [[ "$mode" == "tilde" ]] ; then
# replace only a *leading* :/home/user/
homecheck=":$dir"
dircheck="${homecheck/:$HOME\//:~/}"
dircheck="${dircheck#:}"
else
dircheck="${dir}"
fi;
pathcheck=":$PATH:"
if [[ "$pathcheck" != "${pathcheck/:$dircheck:/}" ]] ; then
echo "ALREADY IN PATH: $dircheck"
else
dirs="$dirs:$dir"
echo " added: $dircheck"
fi
done < <(tree --noreport -L $3 -fi -d "$maindir")
# Choose one of these two options
if [[ "$mode" == "tilde" ]]
then PATH="$PATH${dirs//:$HOME\//:~/}" # change :$HOME to :~/
else PATH="$PATH$dirs" # this method has fully expanded $HOME
fi
echo
echo "$PATH"
echo