При добавлении некоторого каталога в $ PATH с помощью PATH = ~ / my_program / bin: «$ {PATH}»
Спасибо и всего наилучшего!
Этот сценарий использование tree
...
sudo apt-get install tree
Можно изменить глубину каталогов changeing -L 1
и можно выбрать, использовать ли ~/
...
ОБНОВЛЕНИЕ 2:
.. измененный сценарий для замены только продвижения/home/user/(не "любой")
.. и добавил args..
ОБНОВИТЕ Добавленную проверку:.. не добавляйте каталог для СОЕДИНЕНИЯ КАНАЛОМ, когда это уже будет в ПУТИ.. Эта проверка полагает '~ /' и '/home/user /' отличаться.
Ре Ваш вопрос 1... да это верно; каждый определенный каталог должен быть spedified индивидуально в ПУТИ..
Ре Ваш вопрос 2... Вот сценарий, который сделает то, что Вы хотите..
Я протестировал его, но как есть это сделает новый ПУТЬ для текущей сессии..
Для создания этого постоянным, можно использовать export PATH
(но я являюсь немного поверхностным в деталях 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
Это невозможно, потому что системы на основе UNIX не предназначены для такой работы. Как правило, все исполняемые файлы находятся в одном из небольшого количества каталогов. Например, все, что я пишу для своих собственных целей, помещается в ~ / bin.
Если вы не хотите, чтобы ваши фактические двоичные файлы и сценарии находились в каталоге bin, вы можете создать символическую ссылку, например, ~ / bin на фактический двоичный файл.
Наличие всех подкаталогов в $ PATH не особенно желательно, так как оно просто добавляет дополнительные каталоги для поиска, увеличивает риск попадания других исполняемых файлов в ваш PATH, которых не должно быть, и на самом деле не дает большой выгода.
Нет, это просто невозможно. Будет ли возможность добавить программные ссылки на все исполняемые файлы в "~ / my_program / bin"?
Это должно сделать работу.
PATH="$PATH:$(find ~/bin -type d -printf ":%p")"
. Пожалуйста, примите во внимание, что
Попробуйте так:
export PATH="$PATH:$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':' | sed 's/:*$//')"
Это добавит сам ~/.local/bin
вместе со всеми его подкаталогами в $PATH
.
Объяснение:
du
отобразит информацию обо всех подкаталогах в каждой строке cut -f2
извлечет второй столбец, т.е. имена подкаталогов tr '\n' ':'
изменит разрыв каждой ссылки на двоеточие. Это объединит все строки в одну строку, а подкаталоги будут разделены двоеточием sed 's/:*$//'
удалит последнее двоеточие