Question Comment créer un alias Bash permanent?


Je voudrais créer un alias pour rm commande afin d'avoir un message de confirmation après l'exécution de cette commande. Donc, je crée un alias comme celui-ci alias rm='rm -i'. Mais pour autant que je sache, il s'agit d'un alias temporaire et il reste actif jusqu'à la fermeture du terminal.

Comme il est expliqué ici pour enregistrer l'alias en permanence, je dois exécuter ~/.bash_aliases ou ~/.bashrc commandes dans le terminal et ajouter mon alias là. Mais quand j'exécute ~/.bashrc Je reçois le message d'erreur suivant:

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

Quand je cours ~/.bash_aliases Je 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 réel et comment puis-je le résoudre?


308
2017-12-15 07:54


origine


Comment avez-vous créé un alias? - karthick87
@ karthick87. J'ai mis à jour ma question. - Bakhtiyor
RÉPONDRE - stackoverflow.com/a/2622711/1487102 - neaumusic


Réponses:


Pour créer un alias de manière permanente, ajoutez l'alias à votre .bashrc fichier

gedit ~/.bashrc

Et puis ajoutez votre alias en bas.

alt text

Maintenant exécuter . ~/.bashrc dans votre terminal (il devrait y avoir un espace entre le . et ~/.bashrc.

Maintenant, vous pouvez vérifier votre alias.

alt text


342
2017-12-15 08:24



@ karthick87 vous avez écrit "Maintenant, exécutez. ~ / .bashrc dans votre terminal (il devrait y avoir un espace entre le. et ~ / .bashrc." Pourquoi cette étape est-elle nécessaire?) - Geek
qu'est-ce que le premier? faire dedans ~ / .bashrc? - Zen
@Geek @Zen "Execute" n'était pas le terme correct. Le point est équivalent à source. Avec . ~/.bashrc, vous trouvez votre bash. L'exécution du fichier démarre un processus enfant, exécute les commandes dans ce processus, puis revient. Tout ce qui est fait dans le processus fils n'a aucun effet sur le processus parent (le bash à partir duquel vous avez exécuté). Au lieu de cela, le sourcing (avec le point) agit exactement comme si vous écriviez le contenu du fichier dans le terminal. Voici ce que tu veux. .bashrc est à chaque fois que vous démarrez un bash. Si vous apportez des modifications, elles ne s'appliqueront pas tant que vous ne lancerez pas manuellement une nouvelle bash ou source. - Gauthier
@ButtleButkus - peut vouloir changer les préférences d’un utilisateur plutôt que l’ensemble du système. Dans Ubuntu, le fichier .bashrc à l’échelle du système est /etc/bash.bashrc - WillC
Cela ne fonctionne que partiellement. J'ai besoin d'exécuter . ~/.bashrc chaque fois que j'ouvre le terminal. Utiliser OS X EI Captian (v10.11.6). - Shubham A.


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

  1. Ajouter des alias directement dans votre ~/.bashrc fichier

    Par exemple: ajoutez ces lignes à ~/.bashrc fichier

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

    La prochaine fois (après vous être déconnecté / connecté ou terminé) . ~/.bashrc) lorsque vous tapez rm la rm -i la commande sera exécutée.

  2. La seconde méthode vous permet de créer un fichier d'alias distinct, vous n'avez donc pas à les insérer .bashrc, mais à un fichier de votre choix. Tout d'abord, modifiez votre ~/.bashrc fichier et ajouter ou décommenter les lignes suivantes, si ce n'est déjà fait

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

    Enregistrez-le et fermez le fichier. Après cela, il suffit de créer un ~/.bash_aliases fichier et ajouter vos alias là-bas, avec le même format spécifié dans la première méthode.

    Contenu de ma ~/.bash_aliases fichier:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



+1 pour utiliser ~/.bash_aliases. - ændrük
Ouais, utiliser un autre fichier pour les alias est beaucoup plus propre, également portable entre les distributions. J'utilise ce fichier parce que certains alias ne suffisent pas et qu'une fonction est nécessaire. Donc, c'est plus propre si vous utilisez un fichier pour cette tâche à la place. J'ai un autre alias -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", alors l'alias est devenu disponible à l'enregistrement, et si vous faites une erreur, il vous annoncera. - erm3nda
en quelque sorte après avoir ajouté l'alias tels que alias ls='ls -althr', certains des drapeaux donnés ne prendraient pas effet, dans ce cas le drapeau -t ne prend pas effet. est-ce que tu sais pourquoi? - Sajuuk
Par défaut ~/.bashrc contient l'inclusion pour ~/.bash_aliases, pas besoin de le modifier. - Jaakko
Pas toujours ~ / .bashrc contient l'inclusion de ~ / .bash_aliases comme dans mon cas avec le terminal Ubuntu Windows 10, cette solution était très pratique. - Jose


Le problème est que vous essayez d'exécuter un fichier non exécutable: Vous pouvez vérifier cela 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-executable" 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

17
2017-12-15 10:24





Il me semble que votre seul problème est simplement d'essayer d'exécuter .bashrc lorsqu'il 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 par 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, celui-ci s'exécute dans le shell actuel, il restera donc en vigueur.

Je suppose que la deuxième erreur est due au fait que bash_aliases n'existe pas. Ce n'est pas obligatoire, il est simplement 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 dans .bashrc:

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

Cela indique que si le fichier ~ / .bash_aliases existe, exécutez-le.


15
2018-01-16 20:29



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


echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

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

Quelle que soit la commande / la commande aliasée, de cette manière avec l'instruction echo, les guillemets et le symbole pour ajouter la sortie d'une commande à un fichier (>>) fonctionne pour moi. Remplacez simplement ma commande par la commande d'alias dont vous avez besoin et entrez-la dans votre terminal.


8
2018-06-15 11:39



La citation ici est un peu délicate. Dans cet exemple, l'utilisation de guillemets ne pose pas de problème, mais si le texte dans les guillemets contient des signes dollar, des barres obliques inverses, etc., vous devrez comprendre comment le shell les traite entre guillemets. Vous pouvez passer à des guillemets simples à l'extérieur et des guillemets à l'intérieur, mais vous devez toujours comprendre comment Bash traite les guillemets dans la définition d'alias. - tripleee


J'ai fait cette petite fonction pour écrire rapidement un nouvel alias sur .bashrc

##------------------------------------ ##
 #           -- new-alias --           #
 # creates new alias & writes to file  #
 #          $1 = alias new             #
 #          $2 = alias definition      #
##------------------------------------ ##
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:"
    read NAME
  else
    NAME=$1
  fi

  if [ -z "$2" ]; then
    echo "alias definition:"
    read DEFINTION
  else
    if [ "$2" = "-cd" ]; then
      DEFINTION='cd '
    else
      DEFINTION=$2
    fi
  fi

  echo "alias $NAME='$DEFINTION'" >> ~/.bashrc
  . ~/.bashrc
}

5
2017-12-17 20:37



Bonne idée, mais l'utilisation imprudente de cette fonction peut conduire à la corbeille .bashrc avec plusieurs instances de alias commander. Votre fonction doit certainement implémenter des contrôles pour éviter un tel encombrement. - Troublemaker-DV


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 va automatiquement générer votre fichier de points pour que vous n'ayez pas besoin de le faire. Vérifiez-le.


4
2018-01-21 14:14





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.


0
2017-08-09 03:36



"Je suggérerais ..." et pourquoi le suggéreriez-vous? - muru
Vous ne devriez pas jouer avec le fichier système à moins que vous souhaitiez spécifiquement installer un paramètre à l'échelle du système pour tous les utilisateurs. Sur un système personnel, la différence est marginale, mais compliquer les choses avec les fichiers système, vous devriez probablement préférer vos propres fichiers de points personnels pour les préférences personnelles (ce qui facilite la copie des paramètres ailleurs dans le futur aussi). - tripleee
Redémarrer? C'est vraiment un conseil terrible, ne le faites pas, surtout quand source /etc/bash.bashrc fait tout ce que vous voulez dans cet exemple. Mais devrait utiliser ~/.bashrc ou ~/.bash_aliases au lieu - Xen2050
@ Xen2050, j'ai suggéré de redémarrer pour montrer qu'il fonctionne après le redémarrage / la reconnexion. Au fait, même une autre fenêtre de terminal propre fonctionnera également. - Fahad Ahammed
Vous pouvez passer à un nouveau noyau sans redémarrer, ce ne sont pas d'anciennes fenêtres ;-) - Xen2050