为什么 & 不起作用?

为什么 & 不起作用?

因此,在创建命令之前,我运行了该命令find / .bash_profile以查看它是否存在于我的 Mac 上。搜索整个计算机显然需要一分钟的时间,所以我想在后台运行它(这是我以前从未尝试过的事情),所以我&在末尾添加了一个,如下所示:find / .bash_profile &

但是,它并没有在后台运行并让我做其他事情,而是使该过程无法中断!它继续在前台运行,但Ctrl不再C有任何效果;只有完全关闭终端实例才能停止它。

我在这里遗漏了什么?

答案1

它确实在后台运行,您可以做其他事情,但只要它输出某些内容,它就会输出到您当前的终端。

建议: find / -name .bash_profile >my_result.txt 2>/dev/null &

这会将输出保存到文件,并丢弃所有错误(例如权限被拒绝错误)。您可以通过查看输出文件tail my_result.txt或键入 来检查状态jobs

如果需要终止该作业,请输入kill %1其中 1 是作业编号jobs

答案2

您确定该进程在前台吗?仅仅因为它正在将输出写入终端并不意味着它在前台。

如果你有一个产生输出的命令,并且你想在后台运行它,你应该重定向输出如下:

find / -name .bash_profile > find_results &

后台进程不受中断影响是正常的(Ctrl+ C),因此您可以中断前台作业而不会干扰后台作业。(顺便说一句,请注意,您的命令是错误的。)

答案3

您无意中发现了我的一个烦恼find。尝试使用-print如下选项

find / -name '.bash_profile' -print > some_file

您可能还会遇到问题,因为没有对文件名中的点进行转义或单引号。find支持 RegEx 语法,因此文件名中的点可能会被误解。以下任一示例都应该可以解决这个问题

find / -name 'some_file.txt' ...

或者

find / -name some_file\.txt ...

单引号更灵活,因为你不必转义每个控制字符,你可以更轻松地括住 @ 或 / 等字符

相关内容