Comment créer un alias Bash permanent?

382

Je voudrais créer un alias à rmcommander afin d'avoir un message de confirmation après avoir exécuté cette commande. Je crée donc un alias comme celui-ci alias rm='rm -i'. Mais pour autant que je sache, il s’agit d’un alias temporaire, qui perdure jusqu’à la fermeture du terminal.

Comme il est expliqué ici pour sauver alias de façon permanente que je dois exécuter ~/.bash_aliasesou ~/.bashrccommandes dans le terminal et y ajouter mon alias. Mais lorsque j'exécute ~/.bashrc, le message d'erreur suivant s'affiche:

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

Quand je cours, ~/.bash_aliasesje reçois un autre message d'erreur comme celui-ci:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

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

Bakhtiyor
la source
2
REPONSE - stackoverflow.com/a/2622711/1487102
neaumusic
alias rm='rm -i'ne résout pas le problème de l’utilisation accidentelle de la rm
qwr

Réponses:

428

Pour créer un alias de façon permanente, ajoutez-le à votre .bashrcfichier.

gedit ~/.bashrc

Et puis ajoutez votre alias en bas.

texte alternatif

Exécutez maintenant . ~/.bashrcdans votre terminal (il devrait y avoir un espace entre .et ~/.bashrc.

Maintenant, vous pouvez vérifier votre alias.

texte alternatif

karthick87
la source
5
@ karthick87 vous avez écrit "Maintenant, exécutez. ~ / .bashrc dans votre terminal (il devrait y avoir un écart entre.. et ~ / .bashrc.". Pourquoi cette étape est-elle nécessaire?
Geek
5
qu'est-ce que le premier '.' faire dans. ~ / .bashrc?
Zen
22
@ Geek @Zen "Exécuter" n'était pas le terme correct. Le point est équivalent à source. Avec . ~/.bashrc, vous sourcez votre bash. L'exécution du fichier lancerait un processus enfant, exécuterait les commandes de ce processus, puis renverrait. Tout ce qui est fait dans le processus enfant n'a aucun effet sur le processus parent (le bash à partir duquel vous avez exécuté). Au lieu de cela, l’approvisionnement (avec le point) agit exactement comme si vous écriviez le contenu du fichier dans le terminal. Voici ce que tu veux. .bashrcest recherché chaque fois que vous démarrez une bash. Si vous apportez des modifications, elles ne s'appliqueront que si vous démarrez manuellement un nouveau bash ou une nouvelle source.
Gauthier
@ButtleButkus - souhaitera peut-être modifier les préférences d'un seul utilisateur plutôt que le système entier. Dans Ubuntu, le fichier .bashrc à l’échelle du système est /etc/bash.bashrc
WillC
1
@ShubhamA. voir cette question pour le comportement OSX
Jandersen
254

Il y a beaucoup de façons de créer un alias. Les moyens les plus utilisés sont:

  1. Ajoutez des alias directement dans votre ~/.bashrcfichier

    Par exemple: ajoutez ces lignes au ~/.bashrcfichier

    alias ll='ls -l'
    alias rm='rm -i'

    La prochaine fois . ~/.bashrcque vous tapez (après vous être déconnecté / connecté ou terminé ), rmla rm -icommande sera exécutée.

  2. La seconde méthode vous permet de créer un fichier d’alias séparé, vous n’aurez donc pas à les insérer .bashrc, mais dans un fichier de votre choix. Commencez par éditer votre ~/.bashrcfichier et ajoutez les lignes suivantes si elles n'existent pas ou décommentez-les si elles existent:

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi

    Enregistrez-le et fermez le fichier. Après cela, tout ce que vous avez à faire est de créer un ~/.bash_aliasesfichier et d’y ajouter vos alias, avec le même format que celui spécifié dans la première méthode.

    Contenu de mon ~/.bash_aliasesdossier:

    alias cs='cd;ls'
aneeshep
la source
72
+1 pour utiliser ~/.bash_aliases.
ændrük
Oui, utiliser un autre fichier pour les alias est beaucoup plus propre, également portable entre les distributions. J'utilise ce fichier car certains alias ne suffisent pas et une fonction est nécessaire. Donc, c'est plus propre si vous utilisez plutôt un fichier pour cette tâche. J'ai un autre pseudonyme -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", alors le pseudonyme est devenu un atout pour la sauvegarde, et si vous faites une erreur, il vous en fera la publicité.
erm3nda
de manière ou d'autre après que j'ai ajouté l'alias tel que alias ls='ls -althr', certains des drapeaux donnés ne prendraient pas effet, dans ce cas le drapeau -t n'a pas pris effet. est-ce que tu sais pourquoi?
Sajuuk
3
Par défaut ~/.bashrccontient l'inclusion pour ~/.bash_aliases, pas besoin de le modifier.
Jaakko
1
~ / .Bashrc ne contient pas toujours l'inclusion de ~ / .bash_aliases, comme ce fut le cas dans mon cas avec le terminal Ubuntu sous Windows 10, cette solution est très pratique.
José
19

Il me semble que votre seul problème est simplement d’exécuter .bashrc alors que ce n’est pas exécutable. Mais ce n'est pas la bonne façon de le faire. chaque fois que vous apportez une modification à ce fichier, vous devez "l'exécuter" à l'aide de la commande:

source ~/.bashrc

Sinon, il créera simplement un nouveau shell, exécutera le fichier dans l'environnement du nouveau shell, puis supprimera cet environnement à la fermeture, perdant ainsi votre modification. En recherchant le script, il s'exécute dans le shell actuel et reste donc actif.

Je suppose que la deuxième erreur est due au fait que bash_aliases n'existe pas. Ce n'est pas obligatoire, mais il est recommandé de garder vos modifications séparées et organisées. Il n'est utilisé que s'il existe et vous pouvez voir le test le dans .bashrc:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Ceci dit que si le fichier ~ / .bash_aliases existe, alors exécutez-le.

Marty Fried
la source
~/.bash_aliasesest mieux. askubuntu.com/questions/194111/…
tomByrer
1
en utilisant la sourcecommande a fait fonctionner mes alias. +1
dspacejs
4
Juste pour être complet: le point initial sur la ligne . ~/.bash_aliasesa la même signification que la commande intégrée du shell source. Je trouve que c'est la bonne réponse, en expliquant ce qui se passe.
Melebius
17

Le problème est que vous essayez d'exécuter un fichier non exécutable: Vous pouvez le vérifier avec:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

Notez qu'il n'y a pas de lettre "x-exécutable" sur la première colonne (autorisations de fichier).

Les fichiers de profil ne sont pas des fichiers exécutables. Au lieu de les exécuter, vous les chargez avec:

source /home/bakhtiyor/.bashrc

ou

. /home/bakhtiyor/.bashrc
João Pinto
la source
7
echo "alias vps='ssh -X [email protected]'" >> ~/.bashrc

C’est un exemple que je cherchais, un moyen de taper quelques lettres sur le terminal ("vps") pour vous connecter à distance à un serveur et activer le transfert X11 afin que je puisse exécuter des applications graphiques telles que "gedit" sur le réseau.

Quelle que soit la commande / commande avec alias, cette manière avec l'instruction echo, les guillemets et le symbole permettant d'ajouter le résultat d'une commande à un fichier (>>) fonctionne pour moi. Il suffit de remplacer ma commande par la commande d'alias dont vous avez besoin et de la saisir dans votre terminal.

utilisateur80638
la source
La citation ici est légèrement délicate. Dans cet exemple, l’utilisation de guillemets doubles ne pose aucun problème, mais si le texte à l'intérieur des guillemets contient des signes dollar, des barres obliques inverses, etc., vous devez comprendre comment le shell les traite entre guillemets. Vous pouvez passer aux guillemets simples à l'extérieur et aux guillemets doubles à l'intérieur, mais vous devez toujours comprendre comment Bash traite les guillemets doubles dans la définition d'alias.
triple-
5

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

gem install aka2

usage

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

le rubygem auto-source votre fichier de points afin que vous n'en ayez pas besoin. Vérifiez-le.

Ytbryan
la source
4

J'ai écrit cette fonction utile pour créer rapidement un nouvel alias, puis écrire sa définition ~/.bash_aliases (si elle existe) ou ~/.bashrc.

CONSEIL : s’assurer que ~/.bash_aliasesexiste et est exécuté dans ~/.bashrc.

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

  if [ -z "$2" ]; then
    echo "alias definition:" && 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"
}
blizzrdof77
la source
1
Bonne idée, mais une utilisation négligente de cette fonction peut conduire à la suppression .bashrcde plusieurs instances de aliascommande. Votre fonction doit absolument implémenter des contrôles pour éviter un tel encombrement.
Troublemaker-DV
Ceci est un point valide. Avez-vous une solution de contournement que vous souhaitez partager sur @ Troublemaker-DV?
blizzrdof77
Je ne sais pas s’il s’agit toujours de 2 1/2 ans plus tard, mais ... Au début, je voudrais indiquer aux commandes RC pour alias de vérifier si cet alias a déjà été entré pour éviter les doublons. Votre vérification de l'existence d'un pseudonyme ne suffit pas, car le contrôleur potentiel peut déjà être "contaminé" avec plusieurs pseudonymes du même nom.
Troublemaker-DV
0

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 reconnecter.

Fahad Ahammed
la source
7
"Je suggérerais .." et pourquoi suggéreriez-vous cela?
muru
2
Vous ne devriez pas jouer avec le fichier système à moins que vous ne souhaitiez spécifiquement installer un paramètre système pour tous les utilisateurs. Sur un système personnel, la différence est marginale, mais il est plus compliqué de manipuler les fichiers système. Vous devriez donc probablement toujours préférer vos fichiers de points personnels à vos préférences personnelles (ce qui facilite la copie des paramètres ailleurs l'avenir aussi).
triple-
1
Redémarrer? C'est un conseil vraiment terrible, NE FAITES PAS ça, surtout quand source /etc/bash.bashrctout ce que vous voulez dans cet exemple. Mais devrait utiliser ~/.bashrcou à la ~/.bash_aliasesplace
Xen2050
@ Xen2050, j'ai suggéré de redémarrer pour montrer que cela fonctionne après le redémarrage / relogin. À propos, même une autre fenêtre de terminal propre fonctionnera également.
Fahad Ahammed
1
Vous pouvez passer à un nouveau noyau sans redémarrer, ce n'est pas une vieille fenêtre ;-)
Xen2050
0

Si je me souviens bien, bashrca, ou a eu, une ligne suggérant de ne pas l'utiliser directement pour les alias. La solution consiste à utiliser un ou des fichiers externes. Les alias fooet baront été ajoutés, mais pour ajouter bazle bashrcfichier, il faut "rechercher" (ou simplement ouvrir un nouveau terminal). Exemple en tant que:

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' bazalias fonctionne. Je viens tout juste de me rendre compte qu'une réponse précédente avait mentionné cette technique, mais ils avaient enterré le conduit.

Thufir
la source