从Bash脚本更改当前目录

是否可以从脚本更改当前目录?

我想为Bash中的目录导航创建一个实用程序。 我创建了如下所示的测试脚本:

#!/bin/bash
cd /home/artemb

当我从Bash shell执行脚本时,当前目录不会改变。 是否有可能从脚本中更改当前shell目录?


您需要将脚本转换为shell函数:

#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
#   . ~/bin/myprog.sh
#

function myprog() {
  A=$1
  B=$2
  echo "aaa ${A} bbb ${B} ccc"
  cd /proc
}

原因是每个进程都有自己的当前目录,当你从shell执行一个程序时,它将在一个新进程中运行。 标准的“cd”,“pushd”和“popd”内置于shell解释器中,以便它们影响shell进程。

通过将程序设置为shell函数,您将添加自己的进程内命令,然后将任何目录更改反映到shell进程中。


当您启动脚本时,会创建一个只继承您的环境的新进程。 当它结束时,它结束。 您当前的环境保持原样。

相反,你可以像这样开始你的脚本:

. myscript.sh

这个. 将在当前环境中评估脚本,因此可能会改变它


鉴于答案的不可读性和过分复杂,我相信这是请求者应该做的事情

  • 将该脚本添加到PATH
  • 运行脚本. scriptname . scriptname
  • 这个. (点)将确保脚本不在子shell中运行。

    链接地址: http://www.djcxy.com/p/56867.html

    上一篇: Change the current directory from a Bash script

    下一篇: Bash: How