J'ai fait des scripts que je voudrais appeler dans un terminal avec un seul mot (comme l'autre commande Shell traditionnelle, cd
, ls
, etc.).
Jusqu'à présent, j'ai trouvé que je pouvais placer les scripts dans l'un des répertoires désignés par le chemin de l'environnement (répertoires bin
) ou ajouter le répertoire du script au chemin de l'environnement.
Apparemment, Ubuntu recommande de ne modifier aucun fichier bashrc
. De plus, les fichiers bashrc
semblent n’appeler que bash_aliases
, ce qui, je suppose, est plutôt destiné aux alias. De plus, j'ai découvert que je pouvais changer le chemin de tous les utilisateurs dans /etc/environment
ou créer un script dans /etc/profile.d
.
Ce que j'aimerais donc savoir, c'est quelle est la meilleure pratique pour créer une commande personnalisée accessible à un seul utilisateur et à tous les utilisateurs? (Utilisez les répertoires bin
ou modifiez le PATH? Si ce dernier, quel fichier modifier?)
J'aimerais donc connaître les meilleures pratiques pour créer une commande personnalisée accessible à tous les utilisateurs.
/usr/local/bin
. Voir le Norme de hiérarchie de système de fichiers Ubuntu/Linux suit.
4.9/usr/local: hiérarchie locale
4.9.1 Objet
La hiérarchie/usr/local est destinée à être utilisée par l’administrateur système lors de l’installation locale du logiciel. Il doit être sécurisé pour ne pas être écrasé lorsque le logiciel système est mis à jour. Il peut être utilisé pour des programmes et des données pouvant être partagés entre un groupe d'hôtes, mais ne se trouvant pas dans/usr.
Les logiciels installés localement doivent être placés dans/usr/local plutôt que/usr, sauf s'il est en cours d'installation pour remplacer ou mettre à niveau le logiciel dans/usr.
4.9.2 Conditions requises
Les répertoires suivants, ou les liens symboliques vers les répertoires, doivent être dans/usr/local
"/usr/local"
bin
games
include
lib
man
sbin
share
src
J'aimerais donc connaître la meilleure pratique pour créer une commande personnalisée accessible uniquement à un utilisateur.
mkdir $HOME/bin
gedit $HOME/.bashrc
et ajouter en bas:
export PATH="$HOME/bin:$PATH"
Si besoin est, vous pouvez également le définir dans ~/.profile
et dans /etc/profile
(vous devrez toutefois utiliser le nom d'utilisateur pour créer des PATH spécifiques).
Exemple .profile:
if [ -d "$HOME/bin" ] ; then
PATH="$PATH:$HOME/bin"
fi
Je réponds à la question initiale sur une commande personnalisée (pas seulement un script personnalisé).
Une commande simple pour un seul utilisateur (l'utilisateur actuel) peut être créée sous forme d'alias (vous avez mentionné l'alias dans votre question), par exemple
alias rm='rm -i'
pour rendre la commande de suppression interactive. Cela fonctionne "maintenant" et uniquement dans la fenêtre de terminal actuelle. Vous pouvez l'enregistrer dans ~/.bashrc
à proximité des alias standard. Il sera activé dans toutes les fenêtres du terminal à l'avenir, ainsi que dans les écrans de texte.
Veuillez noter que les alias de votre utilisateur actuel ne fonctionnent pas avec Sudo (sauf si vous créez également un alias pour la racine de l'utilisateur et le stockez dans /root/.bashrc
).
C'est une bonne idée de sauvegarder le (s) fichier (s) .bashrc
avant de le modifier, au cas où, par exemple
cd
cp -p .bashrc .bashrc.0
Voir aussi ce lien, Combine 2 commandes en 1 commande personnalisée?
Si vous souhaitez appeler une commande plus avancée, composée de plusieurs lignes de commande et/ou utilisant des paramètres de manière complexe, vous pouvez utiliser
une fonction , définie comme les exemples suivants
soit comme ça (bash seulement)
function rmi {
rm -i
}
ou plus général (également lorsque le shell est appelé sh)
rmi () {
rm -i
}
Une telle fonction est activée comme un alias et peut être stockée de la même manière dans ~/.bashrc
.
un shellscript , qui est un fichier texte avec les commandes bash.
Si vous voulez que l'utilisateur actuel utilise le shell-script, vous pouvez le stocker dans ~/bin
.
mkdir ~/bin # create `~/bin`, if it is not already created.
Sinon, si vous voulez que tous les utilisateurs utilisent le shellscript, vous pouvez le stocker dans l'un des répertoires généraux des programmes exécutables et des scripts, par exemple /usr/local/bin
(ou /usr/local/sbin
si le script doit être exécuté avec Sudo
).
Veuillez vérifier très attentivement que le shellscript a un nom unique , afin de ne pas "concurrencer" (ou même écraser) un programme exécutable déjà existant.