答案1
按照您显示的方式运行脚本会在子 shell 中创建一个复制的环境,并且您所做的任何更改(例如设置目录或环境变量)都只会影响这个子 shell 环境,而不会影响调用 shell。
为了从脚本更改当前 shell,您必须使用source
或.
命令在当前 shell 中运行该脚本:
. ./updir.sh 5
您可以使用别名自动完成此操作:
alias updir='. ./updir.sh'
或者,您可以使用函数代替脚本:
updir()
{ for i in `seq 1 $1`;
do cd ../;
done
}
答案2
因为脚本是在子 shell 中运行的,所以它单独跟踪当前工作目录。最简单的解决方案是使用一个函数:
function updir() {
for i in $(seq 1 $1); do
cd ..
done
}