父 bash 脚本是否会记住子 bash 脚本的 cd 历史记录?

父 bash 脚本是否会记住子 bash 脚本的 cd 历史记录?

例子:

主脚本.sh

cd /mnt/something
./buildscripts/000-script.sh

000-脚本.sh

cd /mnt/otherthing
mkdir something
exit

答案1

是的,执行的过程将不是更改父进程的工作目录。

例子:

  • 来电者.sh

    #!/bin/bash
    echo -n "Caller 1 " ; pwd
    ./callee.sh
    echo -n "Caller 2 " ; pwd
    
  • 被调用者.sh

    #!/bin/bash
    echo -n "Callee 1 " ; pwd
    cd /tmp
    echo -n "Callee 2 " ; pwd
    exit
    

调用caller.sh会产生

Caller 1 /Users/corti/tmp
Callee 1 /Users/corti/tmp
Callee 2 /tmp
Caller 2 /Users/corti/tmp

正如您在打印时看到的,Caller 2父进程仍然具有相同的工作目录

答案2

“孩子”什么都不记得了。这只是进程从其当前工作目录(cwd)启动的基本概念。如果您查看 Linux 系统上的 /proc/*,您可以看到每个进程的该条目。

相关内容