Este script usa tree
...
sudo apt-get install tree
Você pode alterar a profundidade dos diretórios alterando -L 1
e pode optar por usar ou não ~/
...
ATUALIZAÇÃO 2 :
.. modificou o script para substituir apenas um líder / home / usuário / (não "any")
.. e adicionou argumentos.
ATUALIZAÇÃO Verificação adicionada: .. Não adicione o diretório ao PATH quando já estiver no PATH. Essa verificação considera '~ /' e '/ home / user /' diferentes.
Re sua pergunta 1 ... sim, é verdade; cada diretório específico deve ser especificado individualmente no PATH.
Re sua pergunta 2 ... Aqui está um script que fará o que você deseja ..
Eu testei, mas como está, ele criará o novo PATH para a sessão atual.
Para torná-lo permanente, você pode usar export PATH
(mas Estou um pouco superficial nos detalhes de 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
Não, não é possível de uma maneira fácil. Seria possível adicionar links flexíveis a todos os executáveis em "~ / my_program / bin"?
fonte
Tente desta maneira:
Isso se adicionará
~/.local/bin
junto com todos os seus subdiretórios em$PATH
.Explicação:
du
exibirá todas as informações dos subdiretórios de cada linhacut -f2
extrairá a segunda coluna, ou seja, os nomes dos subdiretóriostr '\n' ':'
alterará cada quebra de link em dois pontos. Isso unirá todas as linhas em uma única linha e os subdiretórios são delimitados por dois pontossed 's/:*$//'
irá remover o último cólonfonte