web-dev-qa-db-fra.com

Meilleure pratique pour créer un script personnalisé

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?)

3
F.Jean

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
7
Rinzwind

Je réponds à la question initiale sur une commande personnalisée (pas seulement un script personnalisé).

Commande simple - alias

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?

Commande avancée - fonction ou shellscript

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.

3
sudodus