为什么“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