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

11

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

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

pourtant, même après le redémarrage, je reçois une commande introuvable lors de la frappe de gl. Qu'est-ce qui se passe? Je suis connecté en tant qu'utilisateur correct.

talloaktrees
la source
Où tapez-vous gl? Le terminal? L'interface graphique?
Thomas Ward
1
Personne n'a jamais abordé l'original pourquoi? question. Je peux confirmer que les alias définis dans .profilene fonctionnent dans aucun contexte que j'ai essayé: les connexions à la console de texte, les terminaux graphiques ou autre chose, même si les variables environnementales du même fichier fonctionnent.
Daniel Mahler
@DanielMahler, avez-vous une raison?
Maged Saeed

Réponses:

4

Je suis presque sûr que l'idée de lpanebr 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 .aliasou peu importe et ajoutez .aliasà votre.bashrc

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

Jason
la source
1
Quant au formatage, askubuntu utilise le démarque. S'il vous plaît vérifier askubuntu.com/editing-help pour les détails.
saji89
1
Pourquoi .bashrcfonctionne tout en .profilene fonctionne pas? De plus, pour quelle raison avez-vous choisi de nommer le fichier d'alias .alliasplutôt que .alias?
Tom
# 1 D'après ce que je comprends, .bashrc est spécifique à bash et .profile est spécifique à la ligne de commande non-bash. # 2 Je ne sais pas ce que tu veux dire. Je peux épeler après tout. (édité)
Jason
7

Il existe deux raisons connexes pour lesquelles les alias ne fonctionnent pas toujours lorsqu'ils sont placés dans le .profilefichier. La première est que le fichier .profile(ou .bash_profile) n'est exécuté que pour un shell de connexion. Si vous lancez bash dans une fenêtre de terminal sous X, votre émulateur de terminal (par exemple gnome-termanl) n'exécute probablement pas bash comme shell de connexion. [La plupart ont une option pour changer cela si vous le souhaitez mais la valeur par défaut (pour gnome-termal de toute façon) n'est pas de l'exécuter en tant que shell de connexion.]
Le shell sera un shell interactif et .bashrcsera donc exécuté.

Cependant, normalement bash a été exécuté en tant que shell de connexion lors du démarrage de la session X. Donc, s'il y a des commandes d'alias, .profileelles auront été exécutées avec la définition de variables d'environnement comme 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 cette fenêtre de terminal. Contrairement aux variables d'environnement, les alias ne peuvent pas être exportés d'une instance de bash vers une nouvelle démarrée par celui-ci. 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 .bashrcn'est pas exécuté par bash lorsqu'il est démarré en tant que shell de connexion. Donc, mettre vos alias là-bas ne fonctionnera pas toujours à moins que votre .bashrcsource ne provienne de vous .profile, ce qui est une pratique très courante.

Tony McGregor
la source
Vérifié: l' ajout source .bashrcde .bash_profilepermis à l'ensemble des alias dans .bashrc au travail.
Treefish Zhang du
On dirait que cela devrait être la bonne réponse. De plus, dans Ubuntu, ajoutez simplement vos alias ~/.bash_aliases. C'est la bonne façon de procéder. (lire le fichier .bashrc pour plus de détails).
Emilio M.
0

Si vous utilisez bash ( echo $SHELL) comme interpréteur de shell, je pense qu'il est préférable (ou peut-être la seule façon) de définir votre propre fonction CD.

Modifiez votre .bashrcfichier et ajoutez ce qui suit à la fin:

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

Vous pouvez également l'étendre ainsi:

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

et passez directement à un sous-répertoire et répertoriez son contenu.

lpanebr
la source
1
C'est peut-être une bonne suggestion, mais ce n'est pas une réponse, car elle n'explique pas pourquoi la aliasdirective placée dans le .profilefichier échoue.
Tom
0
$ bash #start a new bash instance

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

Mladen Janjetovic
la source
0

La bonne façon de le faire dans Ubuntu est d'ajouter votre alias ~/.bash_aliases. Créez le fichier s'il n'existe pas.

Ce fichier (s'il est présent) est appelé par défaut ~/.bashrc, et l'alias sera également disponible dans vos émulateurs de terminal.

Emilio M.
la source