如何在shell脚本中运行“ CD”并在脚本完成后呆在那里?
题
我在shell脚本(bash)中使用了“更改目录”
#!/bin/bash
alias mycd='cd some_place'
mycd
pwd
pwd
印刷 some_place
正确,但是脚本完成后,我当前的工作目录不会更改。
是否可以通过脚本改变我的路径?
解决方案
您需要将文件源为:
. myfile.sh
或者
source myfile.sh
不用采购,更改将发生在子壳中,而不是在调用脚本的父壳中发生。但是,当您采购文件时,文件中的行被执行,就像在命令行中键入一样。
其他提示
该脚本在单独的子壳中运行。该子壳会更改目录,而不是您运行的外壳。一个可能的解决方案是 source
脚本而不是运行它:
# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh
在采购要运行的脚本是一个解决方案时,您应该意识到此脚本可以直接修改当前外壳的环境。另外,不可能再通过参数了。
另一种方法是将您的脚本作为bash中的函数实现。
function cdbm() {
cd whereever_you_want_to_go
echo arguments to the functions were $1, $2, ...
}
此技术由AutoJump使用:http://github.com/joelthelion/autojump/wiki为您提供学习壳目录书签。
可以通过采购来实现。采购基本上是在同一外壳中执行脚本,而正常执行(sh test.sh
或者 ./test.sh
)将创建子外壳并在那里执行脚本。
test.sh
cd development/
ls
# Do whatever you want.
执行 test.sh
经过
source test.sh
.
是最短的符号 source
. 。所以你也可以做到
. test.sh
这将执行脚本,并将当前壳的目录更改为 development/
.
每当您在登录外壳上运行脚本时,都会产生一个新的子过程,并且脚本执行在子壳中完成。脚本完成后,子壳退出,您将返回登录外壳。因此,每当您通过CD进行CD脚本,该目录已更改为CD指定的路径,但是到脚本完成时,您可以从启动脚本的位置回到登录壳到工作目录。
克服这种方法的方法是使用,
source yourscript.sh
来源的作用是将脚本执行为TCL脚本,即它的效果与您在登录Shell的命令行上键入每条线并从那里执行时的效果相同。因此,当脚本在CD之后完成时,它将停留在该目录中。