Рубрики
Администрирование

Автодополнение команд после sudo в bash

Возможно кому-то это конечно покажется очевидным и само собой разумеещимся, но вот я раньше этого не знал. Собственно о чем речь, спросите вы?

Постановка задачи:

Сделать автодополнение команд в баше после sudo, а так же возможность выполнения алиасов так же после sudo.

А в чем собственно проблема спросите вы? — Да ни в чем, если вам это не нужно, однако мне, живущему на Mac OS X, периодически приходится выполнять некоторые команды из под рута. А для этого как ни сложно догадаться, используется команда sudo. А поскольку Линуксоид я еще тот, то мне уже давным давно лень писать команды полностью, ведь есть TAB 🙂 Но по умолчанию автодополнение после написания sudo не работает.

Проблема номер два: это то что, после sudo так же не работают алиасы. Вот пример: у меня есть некоторое количество алиасов, среди них alias ll=’ls -l’. Вот что будет если вы попробуете выполнить:

> sudo ll

Password:
sudo: ll: command not found

Решение:

Часть 1: Автодополнение. Делается это очень просто, все что нужно — это прописать в свой .bash_profile:

complete -cf sudo

После этого при следующем логине все заработает. Если не охота перелогиниваться, сделайте source ~/.bash_profile и оно заработает сразу 😉

Часть 2: sudo & alias. Здесь проблема заключается в том, что если баш видит первым словом команду — то дальше он не предполагает, что будет алиас.

Вот что собственно говорит по этому поводу Bash Info Manual:

If the last character of the alias value is a space or tab character, then the next command word following the alias is also checked for alias expansion.

Поэтому решение очень простое: прописываем себе в .bash_profile:

alias sudo=’sudo ‘

и все. Опять же при следующем логине все заработает. Если не охота перелогиниваться, сделайте source ~/.bash_profile и оно заработает сразу.

Ну вот и все.