garder les alias quand j'utilise sudo bash

9

J'ai un serveur Centos 5.5 qui a mes propres commandes d'alias pour mon compte. Quand je le fais, sudo bashje peux toujours utiliser ces alias, je n'ai pas eu à ajouter les alias à la racine .bashrc.

J'ai un autre serveur qui est Centos 6.5. Mais lorsque j'exécuterai sudo bash, il n'utilisera pas mes alias de l'utilisateur sous lequel je suis connecté. Quelqu'un sait-il où je le configure pour inclure les alias de l'utilisateur auquel je suis connecté lorsque j'utilise sudo bash?

Tyler Knotek
la source
Je pense que les alias sont hérités via l'environnement, alors peut-être que la réponse ici fonctionnera: unix.stackexchange.com/questions/92998/…
Barmar
Le 5.5 a probablement conservé $ HOME de l'appelant, tandis que le 6.5 ne le fait pas. Voir la sudo sudo -Vsortie et env_keepdans la page de manuel sudoers.
Stéphane Chazelas
1
Merci Barmar et Stéphane. Votre réponse m'a orientée dans la bonne direction. Je devais définir ce qui suit dans sudoers: Defaults !always_set_homeet Defaults !env_reset`
Tyler Knotek

Réponses:

6

Ajoutez la ligne suivante à votre ~ / .bashrc:

alias sudo='sudo '

Du manuel bash

Les alias permettent de remplacer une chaîne par un mot lorsqu'il est utilisé comme premier mot d'une commande simple. Le shell conserve une liste d'alias qui peuvent être définis et désactivés avec les commandes intégrées alias et unalias.

Le premier mot de chaque commande simple, s'il n'est pas cité, est vérifié pour voir s'il a un alias. Si c'est le cas, ce mot est remplacé par le texte de l'alias. Les caractères '/', '$', '' ',' = 'et l'un des métacaractères du shell ou les caractères entre guillemets répertoriés ci-dessus peuvent ne pas apparaître dans un nom d'alias. Le texte de remplacement peut contenir toute entrée de shell valide, y compris des métacaractères de shell. Le premier mot du texte de remplacement est testé pour les alias, mais un mot identique à un alias en cours de développement n'est pas développé une deuxième fois. Cela signifie que l'on peut alias ls à "ls -F", par exemple, et Bash n'essaie pas de développer récursivement le texte de remplacement. Si le dernier caractère de la valeur d'alias est un espace ou un caractère de tabulation, le mot de commande suivant suivant l'alias est également vérifié pour l'expansion d'alias.

Ainsi, Bash vérifie uniquement le premier mot d'une commande pour un alias, les mots après cela ne sont pas vérifiés. Cela signifie que dans une commande comme sudo ll, seul le premier mot (sudo) est vérifié par bash pour un alias, ll est ignoré. Nous pouvons dire à bash de vérifier le mot suivant après l'alias (c'est-à-dire sudo) en ajoutant un espace à la fin de la valeur d'alias.

Antonizick
la source
Fonctionne aussi bien pour zsh. Je vous remercie!
dzhi
Cela permet simplement d'utiliser des alias dans la sudocommande, par exemple sudo some_alias ..., mais ce que OP demande, c'est comment faire pour que les alias définis pour son propre utilisateur fonctionnent après qu'il passe à un autre utilisateur en utilisant sudo. Disons que j'ai some_aliasdéfini. Quand je sudoà l' rootaide sudo su, un nouvel environnement est créé et que l' alias est pas là défini. Il y a le -Eparamètre de la sudocommande qui devrait exporter l'environnement mais il semble que les alias n'en font pas partie.
David Ferenczy Rogožan du
0

Utilisez sudo -E, qui exportera votre environnement.

Kaboom
la source
3
n'inclut pas les alias (testé sur Ubuntu 16.04.1)
Antonios Hadjigeorgalis
Cela fonctionne mais seulement comme sudo -E bash. Lorsqu'il est utilisé avec suas sudo -E su, les éléments définis dans l'utilisateur .bashrc(alias, invite, etc.) ne sont pas conservés, même s'il semble que les variables d'environnement sont préservées dans les deux cas. Je ne sais pas exactement comment cela fonctionne.
David Ferenczy Rogožan