web-dev-qa-db-fra.com

Pourquoi la définition d'alias dans .profile ne fonctionne-t-elle pas?

J'ai ceci comme dernière ligne de mon .profile:

alias gl="cd /home/jrenner/glances/glances"

pourtant, même après le redémarrage, la commande est introuvable lorsque vous tapez gl. Qu'est-ce qui se passe? Je suis connecté en tant qu'utilisateur correct.

8
talloaktrees

Je suis à peu près sûr que l'idée d'Ipanebr fonctionnera, mais voici une solution plus élégante. Faites cette commande d'alias dans .bashrc C'est comme ça que je le fais, ou certaines personnes préfèrent ajouter un fichier dédié à l'alias. Appelez-le .alias ou autre chose et ajoutez .alias à votre .bashrc

J'aimerais pouvoir faire un formatage comme @lpanelbr. Je me demande s'il y a un wiki?

4
Jason

Il existe deux raisons pour lesquelles les alias ne fonctionnent pas toujours lorsqu'ils sont placés dans le fichier .profile. La première est que le fichier .profile (ou .bash_profile) n'est exécuté que pour un shell de connexion. Si vous démarrez bash dans une fenêtre de terminal sous X, votre émulateur de terminal (par exemple, gnome-termanl) n’exécutera probablement pas bash en tant que shell de connexion. [La plupart ont une option pour changer cela si vous voulez mais la valeur par défaut (pour gnome-termal quand même) est de ne pas l'exécuter comme un shell de connexion.
Le shell sera un shell interactif et ainsi .bashrc sera exécuté.

Cependant, normalement, bash a été exécuté en tant que shell de connexion au moment du démarrage de la session X. Donc, s'il y a des commandes alias dans .profile, elles auront été exécutées en même temps que la configuration de variables d'environnement telles que PATH, etc. Lorsqu'une fenêtre de terminal est ouverte, une nouvelle instance de bash est exécutée pour Demander et exécuter des commandes dans ce terminal. fenêtre. Contrairement aux variables d'environnement, les alias ne peuvent pas être exportés d'une instance de bash vers une nouvelle. Les alias ne sont donc pas transmis au nouveau shell.

Pour voir cela, essayez cette expérience:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Notez que .bashrc n'est pas exécuté par bash lorsqu'il est lancé en tant que shell de connexion. Donc, y mettre vos alias ne fonctionnera pas toujours à moins que votre .bashrc provienne de votre .profile, ce qui est une pratique très courante.

5
Tony McGregor

Si vous utilisez bash (echo $Shell) comme interpréteur Shell, je pense que le mieux (ou peut-être le seul moyen) si vous définissez votre propre fonction de CD.

Editez votre fichier .bashrc et ajoutez les éléments suivants à la fin:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Vous pouvez également l'étendre comme suit:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

et passer directement à un sous-répertoire et lister son contenu.

0
lpanebr
$ bash #start a new bash instance

C'était un problème avec mon serveur. Simple source .profile n'a pas fonctionné pour une raison quelconque

0
Mladen Janjetovic