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 ...
typepour voir comment une commande réelle sera résolue par le shell; par exemple: which echoet type echorapportera différentes choses, whichretourne '/ bin / echo' mais 'type' renvoie que c'est un shell intégré, que le shell préférera au fichier dans '/ bin'.
whichest mieux remplacé par typeou commanddans des shells interactifs, et il est complètement inutile dans les scripts.
$HOMEvariable in $PATHpour une raison quelconque ne fonctionne pas, c'est-à-dire qu'il faut utiliser ~signe à la place.
Concernant ~/binet commandes / programmes disponibles uniquement pour votre utilisateur
Les versions récentes d'Ubuntu incluent le ~/binrépertoire dans votre $PATH, mais seulement si le ~/binrépertoire existe.
S'il n'existe pas:
Assurez-vous que votre ~/.profilecontient la strophe suivante (la valeur par défaut le fait ~/.profiledé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 ~/binrépertoire:
mkdir -p ~/bin
Redémarrez votre ordinateur ou forcez bash à relire ~/.profile:
exec -l bash
exec -l bash" astuce. Que fait le -ldrapeau? Je ne trouve pas d'explication dans man exec.
exec -lexécutera bash en tant que shell de connexion [ wiki.bash-hackers.org/commands/builtin/exec] . En bref, cela oblige bash à relire /etc/profileet ~/.profile. Une simple exécution exec bashne fera que relire ~/.bashrc.