从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中运行。
上一篇: Change the current directory from a Bash script
下一篇: Bash: How