为什么“cd ..”在这种情况下不起作用

为什么“cd ..”在这种情况下不起作用
pwd | grep 'database$'
if [ "$?" = 0 ]; then
echo "has db"
cd ..
cd ..
echo "after has db"
fi

执行后我看到

has db
after has db

我仍然在同一个目录中,如何修复它?

答案1

我认为这与您运行脚本的方式有关。

如果你这样做:

sh ./script.sh

或者

./script.sh

然后它调用一个新的 shell,运行脚本,然后返回到当前 shell。因此 cd 在新 shell 中完成,而当前 shell 未受影响。

尝试一下这个:

. ./script.sh

它将在您当前的 shell 中运行 script.sh,并且在它完成后您将保留结果。

答案2

函数可能更适合这样的命令。例如

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

将其放入 ~/.bashrc 以便此新back命令在新的交互式 bash 会话中可用。

相关内容