Ajout de raccourcis de commande à / bin

8

Existe-t-il un moyen d'ajouter des commandes personnalisées à /bin?

Par exemple, j'utilise docker container lsbeaucoup, et je voudrais transformer cela en une commande de raccourci, comme dcls.

Si j'ajoute un fichier nommé dclsdans /binet à l'intérieur du fichier, spécifiez la commande exacte docker container ls, je suppose que cela ne fonctionnera pas.

Quelle est la bonne façon, s'il y en a une, de faire quelque chose comme ça?

alex067
la source
6
N'ajoutez pas à /bin, vous pouvez ajouter à ~/bin(un bac dans votre propre répertoire) ou à /usr/local/bin(à partager avec tous les utilisateurs de votre système, mais sans interférer avec le gestionnaire de paquets). Ou mieux dans ce cas, pour utiliser un alias.
ctrl-alt-delor

Réponses:

25

Un moyen simple pour un raccourci est de définir un alias

alias dcls='docker container ls'

Cela s'exécute docker container lslorsque vous entrez dclset la commande aliasrépertorie vos alias définis. Pour supprimer cet alias, utilisez unalias dcls.

Si vous utilisez bash, vous pouvez enregistrer l'alias dans votre ~/.bashrcou ~/.bash_aliases.

Si votre ~/.bash_aliasesn'est pas lu au démarrage, vous pouvez ajouter cette ligne à votre ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
Freddy
la source
Merci Freddy! Dois-je créer cet alias à chaque redémarrage du serveur? Ou est-ce lié à mon profil d'utilisateur?
alex067
2
Vous devez l'enregistrer dans le fichier de démarrage du shell de votre utilisateur ~/.bashrcou ~/.profileou ... Si vous n'enregistrez pas l'alias, il est perdu lorsque vous vous déconnectez ou fermez le terminal.
Freddy
Merci encore. Que faire si nous n'avons pas .bashrc ou .profile dans notre dossier ~?
alex067
1
Vraiment? Quel étrange serveur! Si vous utilisez bash, vous pouvez le créer en utilisant echo "alias dcls='docker container ls'" >> ~/.bashrc, puis le source avec . ~/.bashrcou vous déconnecter et vous reconnecter.
Freddy
Vive votre aide, faites-la fonctionner!
alex067
15

En fait, ce que vous décrivez fonctionnerait, avec quelques notes:

  1. Vous pouvez simplement mettre docker container lsdans un fichier appelé /bin/dcls. Mais le comportement de cela peut être un peu compliqué. Il est un peu plus fiable de commencer le fichier avec une ligne appelée "shebang", donc le fichier ressemblerait à
    #! / bin / sh
    docker container ls
    qui spécifie que le fichier est un script shell.
  2. Avant de pouvoir exécuter la commande, vous devez rendre le fichier exécutable avec une commande comme
    chmod + x / bin / dcls
    Vous devez probablement être root pour ce faire (c'est-à-dire l'exécuter avec sudo).
  3. Suivez les deux étapes ci-dessus et vous pourrez taper dcls et ce sera le cas docker container ls. Mais, si vous tapez dcls -l foo, cela suffira docker container ls. Si vous le souhaitez docker container ls -l foo, vous devez changer le script pour dire

    #! / bin / sh
    conteneur docker ls "$ @"
    qui spécifie que tous les arguments que vous tapez sur la dclsligne de commande doivent être transmis à la docker container lscommande.

    Naturellement, vous pouvez faire des choses plus compliquées avec les arguments de ligne de commande.

Pour un mappage d'une commande simple → d'une commande simple, qui n'a pas besoin d'être partagée avec d'autres utilisateurs, il est plus simple de définir un alias ( comme l'a suggéré Freddy ), ou une fonction shell. Les fonctions plus compliquées sont souvent écrites sous forme de scripts; c'est-à-dire des fichiers texte contenant des commandes. Mais, si vous n'avez pas besoin de le partager avec d'autres utilisateurs, il est plus courant d'utiliser un binrépertoire privé .

$ cd                                     # (dans votre répertoire personnel) 
$ mkdir bin
Ensuite , copiez dclsà $HOME/bin, et ajouter
export PATH = "$ HOME / bin: $ PATH"
à votre ~/.bashrc.

En outre, il est courant de mettre des scripts personnels dans /usr/local/binet de partir /binpour les programmes fournis avec le système.

G-Man dit «Réintègre Monica»
la source
Très bonne réponse. Si je l'ajoute au bac comme je l'ai mentionné, cela affecterait tous les utilisateurs, n'est-ce pas?
alex067
Oui; tous les utilisateurs regardent dans /bin,  /usr/binet généralement des répertoires partagés comme /usr/local/bin et parfois /opt, de sorte que les programmes contenus dans ces répertoires sont disponibles à tous les utilisateurs.
G-Man dit 'Réinstalle Monica'
1
Si vous souhaitez partager avec d'autres utilisateurs de votre système /usr/local/bin, cela n'interfère pas avec le gestionnaire de packages.
ctrl-alt-delor
5
+1 pour recommander $HOME/bin. Vous devriez vraiment l'utiliser. Ce n'est pas seulement la bonne portée, mais aide lorsque vous réinstallez votre système (et conservez votre HOME) à ne pas perdre votre commande personnalisée.
allo
1
FWIW J'utilise à la ~/.local/bin place .
Sparhawk
0

Si ce n'est que pour vous, un alias est bien, mais selon la norme Linux Filesystem Hierarchy Standard, les scripts à l'échelle du système local entrent /usr/local/bin/, non /bin.

  1. Bien que cela fonctionnerait certainement /bin, il est préférable de respecter les normes, surtout si votre logiciel va être déployé sur les sites des clients.
  2. Si votre script est facultatif, il doit entrer dans /opt
  3. Le script lui-même serait:

    #!/bin/bash
    #
    # Version 1.0 DD 2019-05-04
    # dcls = docker container ls
    docker container ls "@0"
    if [[ $? -eq 0 ]]; then
      echo -e "Errors encountered..."
      exit 1
    fi
    
Fabby
la source