我知道如何通过键入从终端更改目录
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$