Алиасы — штука удобная, со временем они становятся зоной комфорта, экономят время, особенно на локальной машине. Но как использовать готовые алиасы в своих 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 и т. п., как при обычном логине.
Теперь при запуске скрипта:
- Выведется список всех алиасов.
- Выведется строка из
echo. - Отработает алиас
glist == ls -la.
Можно, конечно, ещё и через source, shopt -s expand_aliases и прочие велосипеды подобное сделать, но через ключик -i нативнее, что ли, получается.
Если же нет возможности поправить скрипт, как вариант, прописываем в .bashrc такую строчку:
function glist () { command ls -la "$@"; }; export -f glist
Теперь даже без ключа -i функция glist будет работать в любом скрипте без вмешательства в него.
Короче, везде свои нюансы. Но вообще как совет — не нужно привязываться к алиасам: если нужно сделать ls -la, так и пиши в скрипте, нахер эти спагетти, оставь их для Ansible.








Комментарии