Ваш скрипт и особенно его внутренние команды cd
прекрасно работают при вызове из bash
с использованием source
или эквивалентных .
команды.
Главная проблема в том, что, как уже было сказано в комментарии @adonis, ваша оболочка, после правильной смены каталога, выйдет, если только файл с точным именем "*.cfg" не существует, что очень сомнительно.
Поскольку я предполагаю, что вы хотите использовать *.cfg в качестве образца, вот как я бы слегка изменил ваш скрипт, чтобы он работал как ожидалось:
#!/bin/bash # Note that the shebang is useless for a sourced script
model_dir=/mypath
chdir() { # use either function or (), both is a non portable syntax
cd $1
}
chdir ${model_dir}/config
if [ ! -s *.cfg ]; then # Single brackets here for the shell to expand *.cfg
echo $(date) "configure file does not exist"
exit 1 # dubious in a sourced script, it will end the main and only shell interpreter
fi