Почему “CD..” не работает в этом если

pwd | grep 'database$'
if [ "$?" = 0 ]; then
echo "has db"
cd ..
cd ..
echo "after has db"
fi

после того, как я выполню его, я вижу

has db
after has db

и я нахожусь все еще в том же dir, как зафиксировать его?

2
задан 23 February 2012 в 00:19

2 ответа

Я думаю, что это имеет отношение, как Вы запускаете скрипт.

Если Вы делаете:

sh ./script.sh

Или

./script.sh

Затем это вызывает новую оболочку, запускает скрипт, затем возвращает Вас текущему. Таким образом, CD сделан в новой оболочке, и Ваш текущий является нетронутым.

Попробуйте это вместо этого:

. ./script.sh

Который выполнит script.sh в Вашей текущей оболочке, и Вы сохраните результаты после того, как это закончится.

11
ответ дан 2 December 2019 в 01:27

Функция более подошла бы для команды как это. Например.

back() {
    if [[ $PWD = *database ]]; then
        cd ../../
    fi
}

Поместите его в ~/.bashrc, чтобы иметь это новое back команда, доступная на новых интерактивных сессиях удара.

1
ответ дан 2 December 2019 в 01:27

Другие вопросы по тегам:

Похожие вопросы: