Я написал очень простой скрипт, как это:
function apply_to_dev {
echo "Applying scripts to DEV..."
alias ISQL="isql -Uuser -Ppwd -SDEV -DDATA -I ~/bin/interfaces"
shopt -s nullglob
for f in ~/src/trunk/Database/scripts/upgrades/current/*.sh
do
echo $f
. $f
done
for f in ~/src/trunk/Database/scripts/upgrades/current/*.sql
do
echo $f
FOUT=`basename "$f"`
ISQL -i "$f" -o "$LOGDIR/$FOUT.dev.out"
done
}
apply_to_dev
Когда я запускаю его, я получаю эти сообщения об ошибках
~/src/trunk/Database/scripts/upgrades/current/JIRA-0192.sql
~/bin/RunSQL.sh: line 48: ISQL: command not found
Почему sh/bash будет думать, что ISQL - это команда, а не псевдоним. Если я добавлю псевдоним сразу после псевдоним ISQL = ...', Я вижу ISQL в распечатке псевдонима.
Как ни странно, файлы * sh в первом цикле for тоже на самом деле вызывают ISQL. ISQL виден внутри файлов * .sh.