Bash, vérifiez toujours $ PWD dans le cadre du chemin?


15

Contexte: Un de mes collègues qui ne vient pas d'un environnement Linux m'a demandé d'utiliser ./avant certaines commandes et pas d'autres, alors je lui ai expliqué comment PATHfonctionnaient et comment les binaires étaient choisis pour être exécutés. Sa réponse a été que c'était stupide et il voulait juste ne pas avoir besoin de taper ./avant les commandes.

Question: Existe-t-il un moyen de modifier facilement le comportement du shell de sorte qu'il $PWDsoit toujours le premier élément activé PATH?


Il peut être stupide (ou pas), mais chaque environnement a ses bizarreries, et c'est une bizarrerie typique du shell Unix.
RonJohn

12
C'est une mesure de sécurité. Les obus le faisaient par défaut (pensez dans les années 1970) et les systèmes multi-utilisateurs ont été largement attaqués à cause de cela.
Charles Duffy

3
Il a répondu que c'était stupide : ledit collègue doit se renseigner lui-même sur ce sujet. Cette réponse immédiate montre une réponse de style PHB : aucune compréhension ou appréciation du système sous-jacent.
Cloud

2
Pourquoi ne pas simplement déposer les binaires dans ~/binet en faire partie PATH? Cela permet également de garder les choses organisées.
Sergiy Kolodyazhnyy

3
@Ziazis sous Windows, le répertoire actuel est pris en compte, qu'il fasse partie ou non PATH(ce qui est la source habituelle de telles considérations).
Stephen Kitt

Réponses:


55

Si vous le voulez vraiment, vous pouvez le faire en ajoutant .à votre chemin:

export PATH=".:$PATH"

Cependant, c'est une mauvaise idée, car cela signifie que votre shell choisira n'importe quelle commande dans le répertoire en cours de préférence aux autres. Si quelqu'un (ou un programme) lâche une lscommande malveillante dans un répertoire que vous utilisez fréquemment, vous avez des ennuis ...


13
C'est un excellent point, bien qu'il suffirait peut-être de déplacer le. à la fin du chemin, puis exportez PATH = "$ PATH :."
Christophe

12
En effet, je me souviens .qu'au début de votre PATHétait la valeur par défaut pour les utilisateurs normaux (si j'ai créé l'utilisateur avec "sam" sur HP-UX, au moins; je ne suis pas sûr de l'ancien SunOS). Plus tard, cette valeur par défaut a été supprimée pour des raisons de sécurité. Si vous avez le .dernier élément de votre PATH, quelqu'un peut encore espérer des fautes de frappe typiques.
Philippos

6
@Philippos, oui comme les fameux /tmp/slscripts de farce pour cibler les utilisateurs avec de tels CHEMINS. Sur Debian et ses dérivés, installez le slpaquet pour avoir une idée de la fréquence à laquelle vous tapez slà la place de ls.
Stéphane Chazelas

Non, ce n'est pas une mauvaise idée, c'est une bonne idée, surtout si vous êtes développeur. Bien sûr, garder un environnement dans lequel personne ne supprime de commandes malveillantes est une autre bonne idée.
jamesqf

4
@jamesqf, en fait, c'est une bonne idée de taper ./quand vous voulez appeler des commandes dans le répertoire courant. Ou, si votre répertoire courant habituel est /project/under/development/bin, ajoutez -le à votre PATH. Cela résout votre cas d'utilisation de développeur. Mettre .au début de votre PATHest une mauvaise idée, point final.
Wildcard

14

Bien que ce ne soit pas une réponse directe à votre question, la meilleure pratique serait de créer un binrépertoire dans votre répertoire personnel comme /home/user/bin:

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Faites-y mettre vos scripts personnels. Le PATHserait parcouru dans l'ordre dans lequel vous le définissez et exécutez vos scripts personnels sans avoir .besoin.


0

Vous devez avoir le. au début de votre variable PATH:

export PATH=".:$PATH"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.