为什么在执行bash文件之后我总是回到主页目录?


Answers:


2

当您运行脚本时,它会为它打开一个新的子shell,因此不会更改您所在shell的环境变量(包括您的工作目录:$ PWD)。如果您希望脚本与您在同一个shell中运行,从而保留它所做的环境变量的变化,而不是执行来源。像这样:

source my-script

要么:

. my-script

但是,这将留下脚本使用的每个临时变量。如果要避免它,请在脚本中创建一个函数,并将所有临时变量声明为local。像这样:

function main()
{
    local var1=whatever
    cd /path/to
    do-something
    ...
}

main

当调用时source,这将留下所有变量,例如工作目录,但不会留下临时变量。


+1用于指出“可变残留物”并详细说明解决方案。
DevSolar 2010年


1

是的,您可以创建一个功能来执行此操作。首先,创建一个完成所有繁重工作的脚本。

然后在.bashrc中创建一个函数,如下所示:

xcd () {
    local archive="$1" dir="$2"

    your_script "$archive"
    cd "$dir"
}

与整个脚本不同,函数在当前shell的上下文中执行。

有关说明,请参阅BASH常见问题解答


0

您的bash脚本继承了调用shell的环境(工作目录,shell变量等)的副本,当脚本退出时会丢弃该副本。如果您测试任何shell变量,例如,通过键入“echo $ foo”,它们将保留它们在您运行脚本之前所拥有的任何值(或者不存在),就像pwd那样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.