1
hzlez 2017-01-31 22:19:18 +08:00
我理解,就和函数的入栈出栈一样,子 shell 调用结束,就回到你执行时的 current directory 了。
|
2
zwpaper 2017-01-31 22:20:06 +08:00 via iPhone
有点没看明白,但是
cd 只是在脚本执行的子 shell 里换目录了,按说也是可以执行成功的 git 在 2.几以后的版本可以用 -C 指定目录 |
3
xpol 2017-01-31 22:25:00 +08:00 via iPhone
git 1.8.5+ 就可以 git -C <directory> ... 了。
|
5
wohenyingyu02 2017-01-31 22:30:37 +08:00 via iPhone
你都知道是新开的 shell 了, cd 跳转的是新开的 shell 的当前目录,不是你正在看的 shell 啊, pwd 也是检查新开的 shell 当前目录,执行完关闭新开的 shell ,为何会影响你在使用的 shell 呢
|
6
larsenlouis 2017-01-31 22:30:43 +08:00
#!/bin/bash
cd "$(realpath "/cygdrive/b/")" ls |
7
wohenyingyu02 2017-01-31 22:32:33 +08:00 via iPhone
@wohenyingyu02 好比你开了两个 shell 窗口,你在其中一个 cd xxx 并不会影响另一个
|
8
yyai3 2017-01-31 22:36:11 +08:00
subshell 继承原 shell 的环境变量和路径, subshell 里的 cd 及新增变量不会影响到原 shell
|
9
ericgui OP @wohenyingyu02 哦,你这一解释我就明白了。 cd 之后新跳转的目录,只是我看不到而已。
|
10
ericgui OP |
11
ericgui OP |
12
KentY 2017-02-01 00:06:34 +08:00
我的 pullall, 你可以参考. git 版本如果不是很老, 可以-C
https://github.com/sk1418/myScripts/blob/master/shell/pullall.sh |
14
binarylu 2017-02-01 01:54:25 +08:00
cd 不是命令,没有一个对应的 bin 程序, cd 是 shell 的关键字,由 shell 直接执行
|
16
hosiet 2017-02-01 10:23:25 +08:00 via Android
我觉得直接把 cd 理解成系统调用比较好,直接对应 chdir(2),不是外部命令,只是运行中的 shell 改了改自己的工作目录而已。
|
17
owt5008137 2017-02-01 11:59:30 +08:00 via Android
1. 当前目录属于环境(变量)
2. 除了内建命令外, shell 里执行一个程序都是新开子进程的(包括执行一个脚本文件) 3. 子进程的环境(变量)变化不会影响父进程。 你理解了这三条就明白为什么了 |
18
ericgui OP @owt5008137 谢谢,这次算是彻底明白了。非常感谢!
|