find命令的"exec"功能可以在后台启动程序吗?

Duc*_*uck 2 unix linux bash

我想做的事情如下:

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \;
Run Code Online (Sandbox Code Playgroud)

可能?还有其他可比的方法吗?

eph*_*ent 13

首先,它不会像您键入的那样工作,因为shell会将其解释为

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} &
\;
Run Code Online (Sandbox Code Playgroud)

这是find在后台运行无效,后跟一个不存在的命令.

即使转义它也不起作用,因为find -exec实际上exec是给出的参数列表,而不是将它赋予shell(这实际上是&为后台处理的).

一旦你知道这就是问题,你所要做的就是启动一个shell来给这些命令:

find . -iname "*Advanced*Linux*Program*" -exec sh -c '"$0" "$@" &' kpdf {} \;
Run Code Online (Sandbox Code Playgroud)

另一方面,鉴于你想要做什么,我建议你做一个

find ... -exec kfmclient exec {} \;  # KDE
find ... -exec gnome-open {} \;      # Gnome
find ... -exec xdg-open {} \;        # any modern desktop
Run Code Online (Sandbox Code Playgroud)

这将打开默认程序中与桌面环境关联的文件.