Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix:链接命令_Unix_Cd_Chain - Fatal编程技术网

Unix:链接命令

Unix:链接命令,unix,cd,chain,Unix,Cd,Chain,我已经学会了“;”相当于命令行中的“enter”。但我有这种情况 我的目录具有以下配置:目录A包含目录B和C。当前在目录B中。我执行以下操作: cd/ 当然,这让我想到了一个好主意。那么我会: cd C 这把我带到了C 但是,如果我链接这两个命令,再次从B开始: (cd./;cd C) 我仍然住在B。发生了什么事?为什么不带我去C?试着这样做: cd .. && cd C 或者,如果删除括号,则原始命令应该可以工作: cd ../ ; cd C 括号导致命令在子shell中执

我已经学会了“;”相当于命令行中的“enter”。但我有这种情况

我的目录具有以下配置:目录A包含目录B和C。当前在目录B中。我执行以下操作:

cd/

当然,这让我想到了一个好主意。那么我会:

cd C

这把我带到了C

但是,如果我链接这两个命令,再次从B开始:

(cd./;cd C)


我仍然住在B。发生了什么事?为什么不带我去C?

试着这样做:

cd .. && cd C
或者,如果删除括号,则原始命令应该可以工作:

cd ../ ; cd C

括号导致命令在子shell中执行,这就是为什么您没有看到目录更改的原因。有关更多详细信息,请参阅。

执行
(cd../;cd C)
时启动的进程有自己的环境,因此有自己的当前工作目录。这一点可以在以下方面得到证明:

dogface@computer ~/A/B
$ ( cd .. ; pwd ; cd C; pwd )
/home/dogface/A
/home/dogface/A/C

dogface@computer ~/A/B
$ pwd
/home/dogface/A/B
现在尝试不使用“(”和“)”


你用的是什么外壳?还有,为什么不直接使用
cd../C
?使用
cd../&cd-C
-我怀疑
启动一个新进程。
a&&b
表示如果
a
命令成功,则使用相同的过程执行
b
。@kfmfe04为false
()
启动子shell进程<代码>
&&
类似,但无条件。@KevinReid ty用于澄清,所以当它完成时,总是返回到其原始目录?@Quannuyen No;原始shell的工作目录从未更改。当您使用
(shell命令)
时,它是“(”和“)”,您将告诉shell启动子进程并在该子环境中执行“shell命令”。如果执行:
(cd..;sleep 10;pwd;cd C)
并在另一个shell中执行
ps-ef--forest
,您可能会明白我的意思。您应该可以看到所有流程的布局。
&&
更安全,因为第一个
cd
命令必须在第二个命令执行之前成功。
dogface@computer ~/A/B
$ cd .. ; cd C

dogface@computer ~/A/C
$ pwd
/home/dogface/A/C