Консоль. Алиасы. Переопределение встроеных функций.

BASH Алиасы.

Часто возникает необходимость в консоле создать собственную команду.

Напимер для того, чтобы запустить последовательно ряд повторяющихся команд.

К примеру, команду, которая добавляет файлы в индекс git и комитит изменения на сервер.

Такая операция проводится довольно часто и состоит из 3-х шагов.

  • добавление файло в индекс для отслеживания;

  • совершение комита;

  • загрузка изменений на удаленный сервер.

Создадаим выполняемый скрипт для этого autocomit.sh.

git add --all
git commit -m 'auto commit'
git push

Добавим права на выполнение.

chmod +x ./autocomit.sh

Теперь чтобы создать свою команду, можно воспользоваться alias-ом, определив его в файле, который будет выполняться каждый раз когда вы открываете терминальную сессию.

Одним из таких файлов являются .bashrc, он запускается первым.

Добавим в него следующий alias и назовем его agit.

alias agit='./path/to/script/autocomit.sh'

Теперь при перезагрузке терминала эта команда станет доступна.

Основы работы с Linux. -> Активируем виртуальное окружени Python.

Bash и виртуальное окружение Python.

Интерпретатор BASH помогает автоматизировать многие рутинные действия.

Например активирование виртуального окружения.

Эта операция происходит довольно часто и иногда разработчик забывает про нее.

Сделаем так, чтобы процесс активации происходил без нашего участия.

Создадим bash скрипт auto.sh с командой активации виртуального окружения.

source ./venv/bin/activate

При этом учитывая что папка виртуального окружения уже создана.

Добавим право на исполнение.

chmod +x auto.sh

Теперь для того, чтобы при изменении директории автоматически запускался наш скрипт необходимо переписать функцию cd.

Сделаем это в файле .bashrc

cd () {
    builtin cd ${1:+"$@"} 
    if [ -f "auto.sh" ]
    then
     . ./auto.sh
    fi  
}

В этой функции мы первым делом вызываем оригинальную (встроенную) функцию cd.

builtin cd ${1:+"$@"}

Затем проверяем существование файла и если он есть запускаем его.

    if [ -f "env.sh" ]
    then
     . ./auto.sh
    fi