Unix:链接命令
我已经学会了“;”相当于命令行中的“enter”。但我有这种情况 我的目录具有以下配置:目录A包含目录B和C。当前在目录B中。我执行以下操作: cd/ 当然,这让我想到了一个好主意。那么我会: cd C 这把我带到了C 但是,如果我链接这两个命令,再次从B开始: (cd./;cd C)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中执
我仍然住在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