Сегодня про это и поговорим. Смотри, есть у тебя алиас в .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, так и пиши в скрипте, нахер эти спагетти, оставь их для ансибла.
Чем меньше привязок, тем меньше багов и стабильнее твой скрипт. Пусть он будет самодостаточный и независимый от всякой хуйни. Изучай.
tags: #bash #linux
@ВАSНDАYS | BАSHDАYS.CОM