487 votes

Comment créer un alias Bash permanent ?

Je voudrais créer un alias pour la commande rm afin d'avoir un message de confirmation après l'exécution de cette commande. Donc je crée un alias comme ceci alias rm='rm -i'. Mais autant que je sache, c'est un alias temporaire et il reste jusqu'à ce que vous fermiez le terminal.

Comme expliqué ici pour enregistrer l'alias de manière permanente, je dois exécuter les commandes ~/.bash_aliases ou ~/.bashrc dans le terminal et ajouter mon alias là-bas. Mais lorsque j'exécute ~/.bashrc, je reçois le message d'erreur suivant :

bash: /home/bakhtiyor/.bashrc: Permission denied

Lorsque j'exécute ~/.bash_aliases, je reçois un autre message d'erreur comme ceci :

bash: /home/bakhtiyor/.bash_aliases: Fichier ou répertoire inexistant.

Quel est le problème réel et comment puis-je le résoudre ?

2 votes

0 votes

alias rm='rm -i' ne résout pas le problème d'utiliser rm de manière hâtive

0 votes

Qu'en est-il d'Ubuntu dans WSL les gars ?

7voto

blizzrdof77 Points 181

J'ai écrit cette fonction utile pour créer rapidement un nouvel alias, puis écrire la définition de l'alias dans ~/.bash_aliases (s'il existe) ou ~/.bashrc.

CONSEIL : Assurez-vous que ~/.bash_aliases existe et est exécuté dans ~/.bashrc.

# -----------------------------------
#  Créer un nouvel alias bash permanent
#
#  @param $1 - nom
#  @param $2 - définition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "nom de l'alias :" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME existe déjà - continuer [o/n] ?" && read YN
    case $YN in
      [Oo]* ) echo "d'accord, continuons.";;
      [Nn]* ) return;;
      * ) echo "réponse invalide." && return;;
    esac
  fi

  if [ -z "$2" ]; then
    echo "définition de l'alias :" && read DEFINTION
  else
    DEFINTION="$2"
  fi

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}

1 votes

Bonne idée, mais en utilisant cette fonction de manière négligente, vous pourriez finir par saccager .bashrc avec de multiples instances de la commande alias. Votre fonction doit certainement implémenter quelques vérifications pour éviter ce genre d'encombrement.

0 votes

C'est un point valide. Avez-vous une solution de contournement suggérée que vous êtes prêt à partager @Troublemaker-DV?

0 votes

Pas certain si c'est encore actuel 2 1/2 ans plus tard, mais... À 1re vue, je greperais le RC pour les commandes d'alias à vérifier, si cet alias était déjà entré pour éviter les doublons. Votre vérification de l'existence d'un alias n'est pas suffisante, car le RC pourrait déjà être "contaminé" par plusieurs alias du même nom.

5voto

ytbryan Points 151

Si vous utilisez ruby, vous pouvez installer aka en utilisant rubygem.

gem install aka2

utilisation

aka generate hello="echo bonjour le monde" #ajouter un alias
aka g hello="echo bonjour le monde"  #ajouter un alias pour les paresseux

aka destroy hello #supprimer l'alias
aka d hello #supprimer l'alias pour les paresseux

le rubygem sourcera automatiquement votre fichier de configuration afin que vous n'ayez pas besoin de le faire. Jetez-y un œil.

3voto

Wolfpack'08 Points 176

Je serais ravi d'approfondir cette idée!

Vous voulez créer un alias pour une commande en fonction de votre question:

echo "alias wolfr='cd /home/wolf'">>./~bashrc

Maintenant, vous pouvez taper wolfr pour vous déplacer dans le répertoire personnel de wolf.

Ceci est très similaire et très cool, la commande export:

echo "export ngse=/etc/nginx/sites-enabled"./~bashrc

Maintenant, vous pouvez taper cp $ngse/my_file /destination_directory/destination_filename pour copier un fichier du répertoire sites-enabled vers une destination.

Rien de tout cela ne fonctionnera tant que vous n'aurez pas fait quelque chose comme ceci:

exec bash

Alternativement, vous pouvez vous reconnecter ou redémarrer.

0voto

Fahad Ahammed Points 673

Je suggère d'utiliser /etc/bash.bashrc

Vous pouvez ajouter une ligne à la fin de ce fichier.

alias ok="ping google.com"

Après avoir mis les alias par ligne, vous devez redémarrer ou vous reconnecter.

7 votes

Je suggérerais .." et pourquoi sugéreriez-vous cela?

2 votes

Vous ne devriez pas modifier le fichier système à moins que vous ne vouliez spécifiquement installer un paramètre global pour tous les utilisateurs. Sur un système personnel, la différence est minime, mais modifier les fichiers système est plus compliqué à l'avenir, il vaut donc mieux préférer vos propres fichiers personnels pour les préférences personnelles (et cela facilite également la copie des paramètres ailleurs dans le futur).

1 votes

Redémarrer? C'est vraiment un conseil terrible, NE le faites pas, surtout lorsque source /etc/bash.bashrc fait tout ce que vous voulez dans cet exemple. Mais vous devriez plutôt utiliser ~/.bashrc ou ~/.bash_aliases

0voto

Thufir Points 4303

De ce que je me souviens, bashrc a, ou avait, une ligne suggérant de ne pas l'utiliser directement pour les alias. La solution est d'utiliser un fichier externe. Les alias foo et bar ont été ajoutés, mais pour ajouter baz, le fichier bashrc doit être "sourcé" (ou, il suffit d'ouvrir un nouveau terminal). Exemple :

thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ cat .bash_aliases 
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'

thufir@dur:~$ 
thufir@dur:~$ source .bashrc 
thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ baz
baz
thufir@dur:~$ 

Maintenant, l'alias baz fonctionne. Je viens de réaliser que dans une réponse précédente, il avait été mentionné cette technique, mais le titre était enfoui.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X