Упрощаем себе жизнь в bash
on
5/07/2012 01:56:00 PM
in
Типа IT
Временами наступает момент когда ввод километровых команд с аргументами вконец заябывает и угнетает. Для лечения этого недуга в bash'е есть замечательный выход - псевдонимы, aliases.
Помимо того что можно тупо создавать ярлыки на длиннющие кишки, можно писать вполне клевые и крутые функции которые заставят ахнуть от дальнейшего использования этих фичей.
Итак, вот что можно сварганить без особых напрягов:
(я например свалил все у себя в ~/.bash_aliases)
alias ssh-srv='ssh -p 2322 nobody@somewhere.in.hell.gov'
alias ssh-ftp='ssh -v root@megaftp.br'
ну и так далее, без особых фантазий...
Далее сама интригующая часть связанная с функциями. Никакой маги конечно нет, используются те же команды оболочки но их можно чудесным образом комбинировать и агрегировать в нечто действительное простое и легкое для использования.
Вот например как можно одной командой залезть в директорию и сразу же вывести путь того куда мы попали:
# переход в директорию и вывод локацииЭто может быть удобным для перемещения по файловой системе если часто используются относительные пути и есть желание удостоверится что находимся мы именно там где и рассчитывали:
cdpwd() {
builtin cd $1
pwd
}
cdpwd ../mimeПо такому сценарию можно сделать псевдоним функции создающую директорию с мгновенным перемещением в нее:
# создать директорию с последующим переходом в нееЮзаем просто - mkcd ~/someshit
mkcd () {
mkdir -p "$1"
cd "$1"
}
Так же можно создавать куда более путевые примочки, например наш "собственный универсальный распаковщик":
# распаковщикТеперь особо не следует заботится о типе архива и ключи которые нужны для распаковки, главное чтобы все используемые утилиты были установлены в системе.
extract() {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted using >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
Напоследок то что мне очень упрощает жизнь учитывая то что в течении дня может возникнут необходимость залезть на одни из штук 30 серверов(учитывая что доступ куда то может быть по root или доменной учетке):
letmein () {или
ssh nobody@"$1"
}
letroot () {В итоге получается все до безобразия коротко и четко:
ssh root@"$1"
}
letmein Valhalla -> OK :)Таким образом можно весьма удобно обжить свою оболочку и она вам улыбнется прелестной улыбкой.