mantieni gli alias quando uso sudo bash


9

Ho un server Centos 5.5 che ha i miei comandi alias per il mio account. Quando lo faccio sudo bashposso ancora usare quegli alias, non ho dovuto aggiungere gli alias ai root .bashrc.

Ho un altro server che è Centos 6.5. Ma quando eseguo sudo bash, non utilizzerà i miei alias dell'utente con cui ho effettuato l'accesso. Qualcuno sa dove lo configuro per includere gli alias dell'utente a cui ho effettuato l'accesso quando utilizzo sudo bash?


Credo che gli alias sono ereditate attraverso l'ambiente, quindi forse la risposta qui funziona: unix.stackexchange.com/questions/92998/...
Barmar

Quello 5.5 probabilmente ha preservato $ HOME dal chiamante, mentre 6.5 no. Vedi sudo sudo -Voutput e env_keepnella pagina man sudoers.
Stéphane Chazelas,

1
Grazie Barmar e Stephane. Entrambe le tue risposte mi hanno indicato la giusta direzione. Ho dovuto impostare quanto segue in sudoers: Defaults !always_set_homee Defaults !env_reset`
Tyler Knotek il

Risposte:


6

Aggiungi la seguente riga al tuo ~ / .bashrc:

alias sudo='sudo '

Dal manuale di bash

Gli alias consentono di sostituire una stringa con una parola quando viene utilizzata come prima parola di un semplice comando. La shell mantiene un elenco di alias che possono essere impostati e non impostati con i comandi integrati alias e unalias.

La prima parola di ogni semplice comando, se non quotata, viene controllata per vedere se ha un alias. In tal caso, tale parola è sostituita dal testo dell'alias. I caratteri '/', '$', '`', '=' e tutti i metacaratteri della shell o i caratteri di quotazione elencati sopra potrebbero non apparire in un nome alias. Il testo sostitutivo può contenere qualsiasi input di shell valido, inclusi i metacaratteri della shell. La prima parola del testo sostitutivo viene testata per gli alias, ma una parola identica a un alias in fase di espansione non viene espansa una seconda volta. Ciò significa che si può alias ls in "ls -F", per esempio, e Bash non tenta di espandere ricorsivamente il testo di sostituzione. Se l'ultimo carattere del valore alias è uno spazio o un carattere di tabulazione, anche la parola di comando successiva che segue l'alias viene controllata per l'espansione dell'alias.

Quindi Bash controlla solo la prima parola di un comando per un alias, le eventuali parole successive non vengono controllate. Ciò significa che in un comando come sudo ll, solo la prima parola (sudo) viene controllata da bash per un alias, ll viene ignorato. Possiamo dire a bash di controllare la parola successiva dopo l'alias (cioè sudo) aggiungendo uno spazio alla fine del valore di alias.


Funziona bene anche per zsh. Grazie!
dzhi

Ciò consente solo di utilizzare gli alias nel sudocomando, ad esempio sudo some_alias ..., ma ciò che OP sta chiedendo è come far funzionare gli alias definiti per il proprio utente dopo che passa a un altro utente usando sudo. Diciamo che ho some_aliasdefinito. Quando ho sudoa rootutilizzare sudo su, viene creato un nuovo ambiente e che alias non v'è definito. C'è il -Eparametro del sudocomando che dovrebbe esportare l'ambiente ma sembra che gli alias non ne facciano parte.
David Ferenczy Rogožan,

0

Usa sudo -E, che esporterà il tuo ambiente.


3
non include gli alias (testati su Ubuntu 16.04.1)
Antonios Hadjigeorgalis

Funziona ma solo come sudo -E bash. Se utilizzato con suas sudo -E su, le cose definite nell'utente .bashrc(alias, prompt, ecc.) Non vengono conservate, anche se sembra che le variabili di ambiente siano conservate in entrambi i casi. Non sono sicuro di come funzioni esattamente.
David Ferenczy Rogožan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.