čtvrtek 9. května 2013

sudo alias.. proč to ten alias najednou nevidí?

Pokud jste v Bashi někdy chtěli použít alias s právy roota tak, že jste před něj zadali sudo, nepochybně jste zjistili, že Bash zahlásí "command not found", ačkoliv samotný alias funguje. Pokud jste tímto prošli, bezpochyby jste si dohledali proč tomu tak je a co s tím dělat. A pro ty, co to teprve čeká, stejně jako mě, mám díky jednomu pacholkovi nějaký ten spoiler. ...

Situace není komplikovaná. Bash kontroluje pouze první slovo každého příkazu zda neodpovídá nějakému aliasu. Řeší se každý příkaz zvlášť, ať už je na začátku řádku, nebo za středníkem, rourou apod. Pokud Bash najde alias odpovídajícího jména, nahradí toto slovo definovaným řetězcem a opět jeho první slovo hledá nejprve mezi aliasy, ale jen v případě, že to slovo není shodné s tím, které právě nahradil. Jinak si dovedete představit, co by s tím udělala rekurze.

Další informace z manuálu praví, že pokud řetězec, kterým je nahrazen alias, končí mezerou, bude Bash hledat mezi aliasy i slovo následující. Pokud tedy takto alias používat z nějakého důvodu musíte, nebo chcete, můžete si upravit sudo dalším aliasem:

alias sudo="sudo "

Aby vám to fungovalo trvale, musíte si tento alias zapsat do souboru

~/.bashrc

aby se definoval pro každou instanci Bashe daného uživatele.

Viz také:
http://askubuntu.com/questions/22037/aliases-not-available-when-using-sudo

Pokud to náhodou nevíte, i Ubuntu má v základu definováno pár aliasů, které krom barvení výstupu grepu přidávají pár variant použití příkazu ls. Když zadáte do terminálu samostatný příkaz alias, dostanete jejich seznam a obsah.

A když už se zas hrabu v tom Bashi, doporučím jeden svůj zapadlý, ale stále aktuální zápaisek:

Bash - synchronizace historie mezi terminály


Žádné komentáře:

Okomentovat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.