猿问

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

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

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

#!/bin/bashcd /home/tree/projects/java

我将这个文件保存为proj,添加了执行权限chmod,并将其复制到/usr/bin..当我这么说的时候:proj它什么都不做。我做错什么了?


拉丁的传说
浏览 1081回答 4
4回答

收到一只叮咚

shell脚本在子shell中运行,每个子shell对当前目录有自己的概念。这个cd成功了,但是一旦子shell退出,您就回到了交互式shell中,那里没有任何变化。解决这个问题的一种方法是使用别名,而不是:alias proj="cd /home/tree/projects/java"

蓝山帝景

你没做错什么!您已经更改了目录,但只在运行脚本的子shell中更改。您可以使用“点”命令在当前进程中运行脚本:. proj但我更希望Greg的建议在这个简单的案例中使用别名。

临摹微笑

这个cd在你的脚本中工作过因为它改变了运行脚本的shell目录,但这是一个独立的进程,与您的交互式shell分叉。解决此问题的一种与POSIX兼容的方法是定义壳程序而不是shell调用命令脚本.jhome () {   cd /home/tree/projects/java}您只需输入此文件或将其放入不同的shell启动文件中。
随时随地看视频慕课网APP
我要回答