为什么“cd”不能在shell脚本中工作?

我正在尝试编写一个小脚本来将当前目录更改为我的项目目录:

#!/bin/bash
cd /home/tree/projects/java

我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin 。 当我通过proj调用它时,它什么也不做。 我究竟做错了什么?


Shell脚本在子shell中运行,并且每个子shell对当前目录的内容都有自己的概念。 cd成功了,但是一旦子shell退出,你就回到了交互式shell,并且在那里没有任何改变。

解决此问题的一种方法是使用别名:

alias proj="cd /home/tree/projects/java"

你没有做错什么! 您已更改目录,但只能在运行脚本的子shell中进行。

您可以使用“dot”命令在当前进程中运行脚本:

. proj

但我更喜欢格雷格的建议,在这种简单的情况下使用别名。


脚本中的cd在技​​术上起作用,因为它改变了运行该脚本的shell的目录,但这是一个与交互式shell分离的独立进程。

解决此问题的Posix兼容方法是定义一个shell过程而不是shell调用的命令脚本。

jhome () {
  cd /home/tree/projects/java
}

你可以直接输入它,或者把它放在各种shell启动文件之一中。

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

上一篇: Why doesn't "cd" work in a shell script?

下一篇: Strange behaviour when using WebView and RelativeLayout in fullscreen