下面代码都是为了说明问题,尽量简化了:
今天是这样的,我想写一个 script ,只有一行:
文件路径和名称:$PATH/
cdtest.sh#!/bin/bash
cd /data/someproject
也就是说,我想在任何目录下,直接跳转至指定目录(这里是 /data/someproject )
然后呢,自然就很显然没反应。只能用 source
cdtest.sh 这个命令,才能实现跳转目录。
查了半天,才知道, script 执行的时候,创建了一个子 shell ,子 shell 的存在依赖于 current directory ,那显然就不能跳转目录了
现在问题来了,我做了这样的改变:
我先判断, pwd 是否是我的目标目录,如果是,就执行 git pull 命令,由于 git pull 命令必须在正确的 git directory 才能 pull 下来代码,所以如果目录不对,就产生 fatal error 。
文件路径和名称:$PATH/
pullsomeproject.sh 1 #!/bin/bash
2
3 target='/data/someproject'
4
5 if [ $(pwd) = $target ]; then
6 git pull git@github.com:myaccount/someproject.git
7 else
8 cd /data/someproject
9
pullsomeproject.sh 10 fi
这个在任意目录下都可以执行成功。
说明什么?
说明在其他目录下,执行了 cd /data/someproject ,实现了目录跳转至 /data/someproject 这个目录,而且又执行了
pullsomeproject.sh 这个脚本。
但是,上面的代码,执行成功之后,仍然留在 pwd ,就是说,没有实现跳转目录。
所以这就尼玛困惑了。到底执行了 cd 这个命令么吗?如果没执行,那 git pull 怎么成功了呢(如果你在其他目录执行 git pull ,会有错误)
如果执行了,为啥没有实现跳转目录?
当然了,如果用 source
pullsomeproject.sh ,那目录也跳转了, git pull 也执行了。
所以就感觉非常邪门。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/337540
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.