J'ai un dossier bin avec un tas de fichiers sh. Par exemple, "server-run.sh", "server-stop.sh", "server-do-something.sh". Et je veux exécuter le fichier "server-stop.sh" de n'importe où. Je pourrais ajouter ce dossier bin à un chemin, mais les fichiers "run" et "à faire" seront également disponibles et je ne souhaite pas polluer ma console. De plus, je ne veux pas ajouter ce fichier au dossier/bin, car cela pourrait changer. Peut-être un lien. Puis-je en quelque sorte ajouter que "server-stop.sh" au chemin?
Le meilleur moyen consiste à ajouter un lien symbolique à ce fichier dans le répertoire /usr/local/bin
:
cd /usr/local/bin
ln -s server-stop.sh /path/to/your/folder/server-stop.sh
Dans ce cas, vous ajoutez un lien au fichier d'origine. Vous pouvez donc toujours modifier le fichier d'origine et votre commande fonctionnera toujours.
La création de liens dans /usr/bin
fonctionne, mais à moins que vous ne souhaitiez que les scripts soient disponibles pour tous les utilisateurs, je préférerais créer les liens dans ~/bin
, avec le même résultat, mais sans toucher au système global. En outre, OP n'a pas indiqué où les scripts sont stockés. créer un lien globalement pendant que les scripts sont stockés localement est une mauvaise pratique, c'est pourquoi je suggérerais:
~/bin
.~/bin
(ln -sf).Que ce soit avec ou sans extension de langue, le script fonctionnerait parfaitement bien. Cependant, il existe certains arguments pour utiliser le script sans extension de langage:
J'utiliserais la commande intégrée bash
hash
pour mémoriser l'emplacement du script server-stop.sh
:
hash -p /path/to/folder/server-stop.sh server-stop
Ajoutez simplement la ligne ci-dessus à votre fichier .bashrc
. Vous pouvez maintenant utiliser server-stop
partout dans votre bash
Shell/scripts.
Voir help hash
:
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME is the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Peut-être un alias est ce que vous recherchez. Ouvrez votre fichier ~/.bash_aliases
et ajoutez les éléments suivants à la fin du fichier (le fichier peut être vide si vous avez déjà ajouté un alias):
alias server-stop.sh='/path/to/your/server-stop.sh`
Avantages:
Ceci n’ajoutera que server-stop.sh
comme vous le souhaitez.
Cela ne changera pas votre variable $PATH
Les autres utilisateurs de votre système ne sont pas affectés
Inconvénients:
Vous devrez changer l'alias une fois que vous aurez changé le chemin où se trouve server-stop.sh
(je ne pense pas que cela sera nécessaire très fréquemment)
Cela ne fonctionnera que pour bash Shell, vous devrez voir ce que les autres shells utilisent pour alias.