当我在脚本中更改工作目录并执行它时,工作目录只会在脚本中更改为指定路径

当我在脚本中更改工作目录并执行它时,工作目录只会在脚本中更改为指定路径

当我在脚本中更改工作目录并执行它时,工作目录只会在脚本中更改为指定路径。这是我的脚本:( 这是为了确保它是否确实更改了目录)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd

当我执行它时,它返回指定的路径,但我的终端中的工作目录没有改变。如何通过脚本更改终端中的工作目录?

答案1

这是正常的。“当前”或“工作”目录是每个进程的参数,进程只能更改它自己的工作目录。独立脚本作为单独的 shell 进程执行,不会影响父 shell(事实上,父 shell 可能并不总是如地狱)。

您将需要使用 shell 内部的功能,例如:

  • shell 函数:

    mycd() {
        cd /media/hard/drive/partitionX/;
        pwd;
    }
    
  • shell 别名:

    alias mycd='cd /media/hard/drive/partitionX; pwd'
    
  • “获取”脚本而不是执行它:

    . mycd.sh
    

如果您的主要目标是创建某些目录的快捷方式,您也可以使用:

  • 更方便的位置的符号链接:

    ln -s /media/hard/drive/partitionX ~/partX
    cd ~/partX
    
  • 变量($mydir):

    mydir=/media/hard/drive
    cd $mydir
    
  • $CDPATH 功能:

    CDPATH=".:/media/hard/drive"
    cd partitionX
    

答案2

实际上,经过多次搜索后我发现,如果您需要更改目录,同时仍保留相同的 shell,那么您将在当前脚本中获得所有答案,您可以使用:

(cd your_dir; do_some_command_there)

例如我需要使用:

((cd your_dir; git remote -v | wc -l)

奇迹般有效!

相关内容