我知道有一个简单的命令可以做到这一点,但我试图运行一个 file.sh,其中包含如下行:
mkdir $filename
cd $filename
文件执行成功,但最后还是回到了文件开头。我知道在前面放一个简单的关键字,可以让执行结果停留在目录 $filename 中,但我在互联网上找不到它。我以前找到过一次,但似乎再也找不到了。
答案1
根据这个:
https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script
你可以使用以下方式运行脚本
. ./scriptname
它将使用你的 shell 运行 shell 脚本,而不是像通常那样调用子 shell。
答案2
执行 shell 脚本相当于在另一个 shell 中运行它。执行./script.sh
相当于sh script.sh
,这可能会更好地为您打开问题。
要在当前 shell 上下文中运行脚本,您需要使用source
或其别名.
,即source script.sh
或. script.sh
。
对于这种简单操作,最简单的解决方案是创建别名而不是脚本,即。alias mkcd='mkdir dir; cd dir'
或者如果您需要运行任意目录,您可以执行mkcd() { mkdir $1; cd $1 }
函数。您可以将其中任何一个放入~/.bashrc
或中~/.bash_aliases
。