“ cd&”是什么意思?


8

我知道如何通过键入从终端更改目录

cd <directory>

但是这是场景。我正在使用终端进入git存储库的文件夹。

  • glenn存储库
    • glenn-remdroid存储库

给定上面的文件夹结构,我想进入,glenn-remdroid-repository因为这是我的存储库。

cd glennRepositories

在切换到glenn-remdroid-repository之前,我错误地键入了命令

cd & 

代替cd *。我cd *之所以使用该文件夹,是因为该文件夹名对我来说太长了,抱歉。

当我执行时cd &,终端回复

[1] 7519

当我执行cd *这件事时

[1]+  Done                    cd  (wd: ~/glennRepositories)
(wd now: ~/glennRepositories/glenn-remdroid-repository)

有谁代表什么cd &及其输出?Google不知道我的问题:)


1
Google找不到的东西是瑞典的新词“ ogooglebar”
Chloe

当我输入问题时,搜索结果是关于光盘的。Ungoogleable :)
GLenn

3
“我使用cd *,因为文件夹名对我来说太长了,很抱歉,我很懒。” 只需键入cd <TAB>,唯一文件夹的名称就会自动展开。
Bakuriu

Answers:


20

通过&在命令行的末尾编写,您将指示外壳程序采用命令管道(在这种情况下为单个命令)并在后台的子外壳程序中运行它(不等待结果)。cd是内置的bash,但这在这里并不重要。它不会以任何方式影响您的“父”外壳,因此您的工作目录不会更改。

[1] 7519

此行报告说,有一个作业在数字1标识的后台运行,进程ID为7519。如果运行例如eg vim,然后按Ctrl+ Z使其暂停,则将打印类似的内容。该过程完成后,外壳程序将在下一个处理周期(例如Return再次单击)之前才报告该事件,然后它将打印更新列表作业完成。

有关更多详细信息,请阅读man bash和部分JOB CONTROL

供参考,问题为什么不起作用exit &有一些相似之处。


是立即报告作业结束还是在下一个提示符下报告取决于外壳。在fish和中zsh,将立即报告。在bash和其他POSIX壳或(T)CSH这取决于的设置notify选项(默认关闭)(zsh是一类POSIX外壳也有一个notify选项,但除非它告诉仿效另一个shell通过默认关闭)
斯特凡Chazelas '17

1

所述&操作者发送处理到背景; 因为cd可以不带参数运行,你正在运行它,并把它发送到后台。如果使用手册页:

名称

cd-更改Shell工作目录。

概要

cd[ -L| -P] [ 目录 ]

描述

更改外壳程序工作目录。

将当前目录更改为DIR。默认DIRHOMEshell变量的值。

该变量CDPATH定义包含DIR的目录的搜索路径 。中的备用目录名称CDPATH用冒号(:)分隔。
空目录名称与当前目录相同。如果DIR以斜杠(/)开头,CDPATH则不使用。

如果找不到目录,并且cdable_vars设置了shell选项,则该单词被认为是变量名。如果该变量具有值,则将其值用于DIR

选项:

-L强制要遵循的符号链接
-P使用物理目录结构,而不遵循符号链接

默认值是遵循符号链接,就像-L已指定一样。

退出状态:

如果目录已更改,则返回0;否则,返回0。否则为非零。

也可以看看

bash(1)

实施方式

GNU bash,版本4.1.5(1)-发行版(i486-pc-linux-gnu)
版权所有(C)2009自由软件基金会,公司。
许可证GPLv3 +:GNU GPL版本3或更高版本

您可以看到参数是可选的。所以

cd &作为处理 cd,然后发送到后台。cd不带参数调用when时,不需要处理。因此它作为“完成”(已处理)进入背景。

有关& The Bash &(“&”号)的一些信息是用于分叉进程的内置控制运算符。在Bash手册页中,“如果命令被控制操作员终止&,则shell将在子shell的后台执行命令”。

如果登录到交互式外壳程序,则会为进程分配一个作业号,并显示子PID。下面的工作号是1。

bash$ sleep 30 &
[1] 3586

请注意,在分叉过程时,子PID会存储在特殊变量中 $!

bash$ echo $!
3586

您可以按作业编号终止作业,如下所示:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$

5
接近,但不完全是。首先,不是先cd运行然后将其发送到后台。对于常规命令,实际上是在程序运行之前创建了后台进程。在内置的情况下,将模拟此行为。该命令将由该后台进程运行,以替换它。其次,cd没有参数做一些事情:它将您带到HOME目录。但是,由于您已将其分叉到后台,因此在这种情况下没有任何效果。
沃伦·杨

联机帮助页上的@WarrenYoung表示,如果未分配任何值,则cd将使用主目录。在成功更改目录后,它是否不接收$ pwd的值?
vfbsilva

1
后台进程的当前工作目录得到的影响,而不是前台的Bash shell的。
沃伦·杨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.