1 hzlez 2017-01-31 22:19:18 +08:00 我理解,就和函数的入栈出栈一样,子 shell 调用结束,就回到你执行时的 current directory 了。 |
![]() | 2 ikw 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 谢谢,这次算是彻底明白了。非常感谢! |