“cd &”是什么意思?

“cd &”是什么意思?

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

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 &意思及其输出吗?谷歌不知道我的问题:)

答案1

通过在命令行末尾写入&,您将指示 shell 获取命令管道(在本例中为单个命令)并在后台的子 shell 中运行它(不等待结果)。cd是 bash 内置函数,但这在这里并不重要。它不会以任何方式影响您的“父”shell,因此您的工作目录不会更改。

[1] 7519

该行报告有一个作业在后台运行,编号为 1,进程 ID 为 7519。如果运行eg vim,然后按Ctrl+Z暂停它,将会打印类似的内容。当该过程完成时,外壳不会报告,直到下一个处理周期(例如,Return再次点击),然后它将打印更新列表作业完成。

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

作为参考,这个问题为什么exit &不起作用?具有一定的相似性。

答案2

操作&员将进程发送到后台;因为cd可以在没有参数的情况下运行,所以您正在运行它并将其发送到后台。如果您查看手册页:

姓名

cd - 更改 shell 工作目录。

概要

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

描述

更改外壳工作目录。

将当前目录更改为目录。默认目录是 shell 变量的值HOME

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

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

选项:

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

默认情况下是遵循符号链接,就像-L指定的一样。

退出状态:

如果目录改变则返回0;否则非零。

也可以看看

bash(1)

执行

GNU bash,版本 4.1.5(1)-release (i486-pc-linux-gnu)
版权所有 (C) 2009 Free Software Foundation, Inc.
许可证 GPLv3+:GNU GPL 版本 3 或更高版本

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

cd &被处理 cd然后发送到后台。当cd不带参数调用时,不需要处理。因此它会以“完成”(已处理)状态进入后台。

& 有关Bash (与符号)的一些信息&是用于分叉进程的内置控制运算符。从 Bash 手册页来看,“如果命令由控制运算符终止&,则 shell 会在子 shell 的后台执行该命令”。

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

bash$ sleep 30 &
[1] 3586

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

bash$ echo $!
3586

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

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

相关内容