pwd | grep 'database$'
if [ "$?" = 0 ]; then
echo "has db"
cd ..
cd ..
echo "after has db"
fi
после того, как я выполню его, я вижу
has db
after has db
и я нахожусь все еще в том же dir, как зафиксировать его?
Я думаю, что это имеет отношение, как Вы запускаете скрипт.
Если Вы делаете:
sh ./script.sh
Или
./script.sh
Затем это вызывает новую оболочку, запускает скрипт, затем возвращает Вас текущему. Таким образом, CD сделан в новой оболочке, и Ваш текущий является нетронутым.
Попробуйте это вместо этого:
. ./script.sh
Который выполнит script.sh в Вашей текущей оболочке, и Вы сохраните результаты после того, как это закончится.
Функция более подошла бы для команды как это. Например.
back() {
if [[ $PWD = *database ]]; then
cd ../../
fi
}
Поместите его в ~/.bashrc, чтобы иметь это новое back
команда, доступная на новых интерактивных сессиях удара.