在脚本中更改目录不会更改目录——为什么?

Dav*_*ton 1 bash bash-scripting

自从搜索这个以来,我已经看到了这个答案,但最初我写了这个脚本:

for i in `seq 1 $1`; 
   do cd ../;
done;
Run Code Online (Sandbox Code Playgroud)

它不会更改目录。这是为什么,运行为

./updir.sh 5
Run Code Online (Sandbox Code Playgroud)

AFH*_*AFH 5

如您所见,运行脚本会在子 shell 中创建一个复制的环境,您所做的任何更改(例如设置目录或环境变量)仅影响此子 shell 环境,而不影响调用 shell。

为了从脚本对当前 shell 进行更改,您必须使用sourceor.命令在当前 shell 中运行脚本:

. ./updir.sh 5
Run Code Online (Sandbox Code Playgroud)

您可以使用别名自动执行此操作:

alias updir='. ./updir.sh'
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用函数而不是脚本:

updir()
{   for i in `seq 1 $1`; 
       do cd ../;
    done
}
Run Code Online (Sandbox Code Playgroud)