为什么“cd ..”在此不起作用,如果

UAd*_*ter 2 bash

pwd | grep 'database$'
if [ "$?" = 0 ]; then
echo "has db"
cd ..
cd ..
echo "after has db"
fi
Run Code Online (Sandbox Code Playgroud)

执行后我看到

has db
after has db
Run Code Online (Sandbox Code Playgroud)

我仍然在同一个目录中,如何解决它?

Cae*_*ium 11

我认为这与您如何运行脚本有关。

如果你这样做:

sh ./script.sh
Run Code Online (Sandbox Code Playgroud)

或者

./script.sh
Run Code Online (Sandbox Code Playgroud)

然后它调用一个新的 shell,运行脚本,然后返回到当前的 shell。所以 cd 是在新的 shell 中完成的,你当前的 shell 没有受到影响。

试试这个:

. ./script.sh
Run Code Online (Sandbox Code Playgroud)

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

  • @UAdapter:要确保问题在于您如何运行脚本而不是使用脚本,请尝试在执行每个 cd 命令之前和之后从脚本打印当前工作目录。 (2认同)