Qu'est-ce que c'est $PATH
?
Comment puis-je avoir des commandes / programmes qui ne sont disponibles que pour moi?
J'ai déjà vu ce chemin ~/bin
, mais à quoi sert-il et comment l'utiliser?
Qu'est-ce que c'est $PATH
?
Comment puis-je avoir des commandes / programmes qui ne sont disponibles que pour moi?
J'ai déjà vu ce chemin ~/bin
, mais à quoi sert-il et comment l'utiliser?
Réponses:
$ PATH est une variable d'environnement utilisée pour rechercher des commandes. Le ~ est votre répertoire personnel, donc ~ / bin sera / home / user / bin; c'est un répertoire normal.
Lorsque vous exécutez "ls" dans un shell, par exemple, vous exécutez en fait le programme / bin / ls; l'emplacement exact peut différer selon la configuration de votre système. Cela se produit car / bin est dans votre $ PATH.
Pour voir le chemin et trouver où se trouve une commande particulière:
$ 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 ...
Pour avoir votre propre répertoire bin privé, il vous suffit de l'ajouter au chemin. Pour ce faire, modifiez ~ / .profile (un fichier masqué) pour inclure les lignes ci-dessous. Si les lignes sont commentées, il suffit de les décommenter; s'ils sont déjà là, vous êtes prêt!
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
Vous devez maintenant créer votre répertoire ~ / bin et, comme .profile est exécuté à la connexion et n'ajoute ~ / bin que s'il existe à ce moment, vous devez vous reconnecter pour voir le CHEMIN mis à jour.
Testons-le:
$ 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
pour voir comment une commande réelle sera résolue par le shell; par exemple: which echo
et type echo
rapportera différentes choses, which
retourne '/ bin / echo' mais 'type' renvoie que c'est un shell intégré, que le shell préférera au fichier dans '/ bin'.
which
est mieux remplacé par type
ou command
dans des shells interactifs, et il est complètement inutile dans les scripts.
$HOME
variable in $PATH
pour une raison quelconque ne fonctionne pas, c'est-à-dire qu'il faut utiliser ~
signe à la place.
Concernant ~/bin
et commandes / programmes disponibles uniquement pour votre utilisateur
Les versions récentes d'Ubuntu incluent le ~/bin
répertoire dans votre $PATH
, mais seulement si le ~/bin
répertoire existe.
S'il n'existe pas:
Assurez-vous que votre ~/.profile
contient la strophe suivante (la valeur par défaut le fait ~/.profile
déjà):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Créez le ~/bin
répertoire:
mkdir -p ~/bin
Redémarrez votre ordinateur ou forcez bash à relire ~/.profile
:
exec -l bash
exec -l bash
" astuce. Que fait le -l
drapeau? Je ne trouve pas d'explication dans man exec
.
exec -l
exécutera bash en tant que shell de connexion [ wiki.bash-hackers.org/commands/builtin/exec] . En bref, cela oblige bash à relire /etc/profile
et ~/.profile
. Une simple exécution exec bash
ne fera que relire ~/.bashrc
.