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 会话中可用。