我正在尝试编写一个小脚本,以将当前目录更改为我的项目目录:
#!/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"
你什么都没做错!您已经更改了目录,但仅在运行脚本的子外壳中进行了更改。
您可以使用 “dot” 命令在当前进程中运行脚本:
. proj
但是我更希望格雷格的建议在这种简单情况下使用别名。
脚本中的cd
从技术上来说可以正常工作,因为它更改了运行脚本的 shell 的目录,但这是与交互式 shell 分开的一个独立过程。
解决此问题的 Posix 兼容方法是定义Shell 过程,而不是 Shell 调用的命令脚本。
jhome () {
cd /home/tree/projects/java
}
您可以只输入它或将其放在各种 Shell 启动文件之一中。