为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉丁的传说 2019-06-03 16:01:49
为什么“CD”不能在shell脚本中工作?我试图编写一个小脚本将当前目录更改为我的项目目录:#!/bin/bashcd /home/tree/projects/java我将这个文件保存为proj,添加了执行权限chmod,并将其复制到/usr/bin..当我这么说的时候:proj它什么都不做。我做错什么了?
查看完整描述

4 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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

解决这个问题的一种方法是使用别名,而不是:

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


查看完整回答
反对 回复 2019-06-03
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

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

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

. proj

但我更希望Greg的建议在这个简单的案例中使用别名。


查看完整回答
反对 回复 2019-06-03
?
临摹微笑

TA贡献1982条经验 获得超2个赞

这个cd在你的脚本中工作过因为它改变了运行脚本的shell目录,但这是一个独立的进程,与您的交互式shell分叉。

解决此问题的一种与POSIX兼容的方法是定义壳程序而不是shell调用命令脚本.

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

您只需输入此文件或将其放入不同的shell启动文件中。


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 1085 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信