5 votes

La commande `alias` dans `.profile` n'est pas reconnue tant que `source .profile` n'est pas appelé

J'ai la ligne suivante dans mon .profile dans mon répertoire personnel :

alias flux='redshift -O 2500'

Mais chaque fois que je me connecte et que je tape flux Je reçois un flux is not a recognized command .

Je fais ensuite un source .profile et tapez flux et cela fonctionne parfaitement.

Je suis sur Ubuntu 20.04

Pourquoi la alias dans mon .profile ne fonctionne pas à moins que je ne fasse un source .profile ?

edit : je comprends maintenant que .profile n'est pas l'endroit approprié.

J'ai fini par charger les alias à partir du fichier .bashrc à l'aide du fichier source commande :

for file in ~/.dotfiles/.{exports,aliases}; do
    [ -r "$file" ] && source "$file"
done
unset file

8voto

Eliah Kagan Points 111731

TL;DR : En Gunnar Hjalmarsson dit , mettre des alias dans ~/.bash_aliases .

Les commandes dans ~/.profile sont exécutées par des shells de connexion. Ce fichier est un bon endroit pour faire des choses qui doivent être faites une fois au début de chaque session mais qui ne doivent pas être répétées à chaque fois qu'un nouveau Shell est démarré. ~/.profile permet de définir des variables d'environnement qui seront héritées par tous les processus descendants.

Les alias ne sont pas hérités, et le Shell que vous obtenez dans une fenêtre de terminal sous Ubuntu n'est pas (par défaut) un Shell de connexion. Pour définir des alias pour tous vos shells Bash interactifs, les définitions doivent être placées à un endroit où elles seront exécutées chaque fois que vous démarrerez un Shell.

Les endroits habituels sont soit à l'intérieur, soit à l'extérieur :

  • ~/.bashrc
  • ~/.bash_aliases

Nouvelle source de shells interactifs sans login ~/.bashrc (tout comme certains shells non interactifs). Votre ~/.profile Par défaut, les sources ~/.bashrc .

La valeur par défaut ~/.bashrc dans Ubuntu vérifie si ~/.bash_aliases existe et en est la source.

Je recommande de placer les nouveaux alias dans ~/.bash_aliases .


Sourcing ~/.profile permet de définir les alias, mais il réexécute également tout le reste du fichier, dont la plupart n'ont pas besoin d'être réexécutés, et dont certains peuvent faire des choses que vous ne voulez pas. Par exemple, ~/.profile vérifie si ~/bin existe et, si c'est le cas, l'ajoute à votre $PATH . Si vous vous approvisionnez en ~/.profile plusieurs fois, il est possible que le même répertoire apparaisse plusieurs fois dans le fichier $PATH . Il faudrait que cela se produise assez souvent pour causer un problème de performance significatif. Mais même une seule occurrence supplémentaire peut être source de confusion lorsque vous inspectez la sortie d'une commande telle que printenv PATH .

Si vos alias ne sont pas définis même dans les shells de connexion initiaux comme lorsque vous vous connectez à partir d'une console virtuelle ou via SSH, puis en tant que Kulfy fait allusion à Il se peut que le problème soit lié au fait que vous avez un ~/.bash_profile o ~/.bash_login fichier. Si un tel fichier existe, les shells de connexion Bash l'extraient à la place de ~/.profile . Le plus souvent, vous ne voudrez pas avoir un tel fichier sur Ubuntu, et si c'est le cas, vous voudrez très probablement qu'il soit source ~/.profile de manière à ce que les commandes dans ~/.profile toujours en cours.

Mais même si c'est le cas, vous ne devez pas définir d'alias dans la rubrique ~/.profile (ni en ~/.bash_profile o ~/.bash_login ), car cela ne les définit pas dans les shells sans login.

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