Алиасы — штука удобная, со временем они становятся зоной комфорта, экономят время, особенно на локальной машине. Но как использовать готовые алиасы в своих Bash-скриптах?

Сегодня про это и поговорим. Смотри, есть у тебя алиас в .bashrc:

alias glist="ls -la"

Тут понятно: вводим glist, а оно по умолчанию интерпретируется как ls -la. А теперь напишем простой Bash-скрипт:

#!/bin/bash

alias
echo "hello bashdays"
glist

И вот незадача. Получаем ошибку: glist: command not found

Ну, оно и ежу понятно. Алиасы тут никаким боком к скрипту не привязаны.

Команда alias по идее должна была вывести все алиасы, которые прописаны, но она этого не сделала.

И как быть?

Городить в самом скрипте всё необходимое? Ну, можно и так, но есть способ изящнее.

Изменяем скрипт:

#!/bin/bash -i

alias
echo "hello bashdays"
glist

Добавился ключик -i, с помощью него мы запускаем оболочку Bash в интерактивном режиме. Само собой, подтягиваются всякие .bashrc и т. п., как при обычном логине.

Теперь при запуске скрипта:

  1. Выведется список всех алиасов.
  2. Выведется строка из echo.
  3. Отработает алиас glist == ls -la.

Можно, конечно, ещё и через source, shopt -s expand_aliases и прочие велосипеды подобное сделать, но через ключик -i нативнее, что ли, получается.

Если же нет возможности поправить скрипт, как вариант, прописываем в .bashrc такую строчку:

function glist () { command ls -la "$@"; }; export -f glist

Теперь даже без ключа -i функция glist будет работать в любом скрипте без вмешательства в него.

Короче, везде свои нюансы. Но вообще как совет — не нужно привязываться к алиасам: если нужно сделать ls -la, так и пиши в скрипте, нахер эти спагетти, оставь их для Ansible.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Чем меньше привязок, тем меньше багов и стабильнее твой скрипт. Пусть он будет самодостаточный и независимый от всякой хуйни. Изучай.