下面代码都是为了说明问题,尽量简化了:
今天是这样的,我想写一个 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 [email protected]: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 也执行了。
所以就感觉非常邪门。
今天是这样的,我想写一个 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 [email protected]: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 也执行了。
所以就感觉非常邪门。