在后台执行 shell 并使用 find gun
execute shell with find gun at background
我在同一目录中有一组 shell,我想执行所有开头有结果的 shell,如:
result.sha
result.shb
result.shc
...
下面的脚本可以找到执行所有具有匹配 reg 的 shell,但是我怎样才能让它们中的每一个 运行 在后台并行
find . -type f -name 'result.*' -exec sh {} \;
我已经尝试过了,但它不起作用:
find . -type f -name 'result.*' -exec sh {} \;&
我认为您的解决方案在后台运行查找程序,而不是在后台执行每个 shell 脚本。我自己尝试使用 find 实用程序,但无法使其正常工作。但是,以下 shell 脚本将执行您的要求。
#!/bin/bash
for prog in result.*
do
sh $prog &
done
exit 0
或 1 行的等效指令
每批 find
结果仅启动 sh
一次,并让它根据需要分叉出尽可能多的子进程,效率更高。
find . -type f -name 'result.*' -exec sh -c 'for arg do . "$arg" & done' _ {} +
. "$arg" &
分叉出 already-running 解释器的副本并在其中运行 "$arg"
中的代码,避免额外支付解释器启动成本。
我在同一目录中有一组 shell,我想执行所有开头有结果的 shell,如:
result.sha
result.shb
result.shc
...
下面的脚本可以找到执行所有具有匹配 reg 的 shell,但是我怎样才能让它们中的每一个 运行 在后台并行
find . -type f -name 'result.*' -exec sh {} \;
我已经尝试过了,但它不起作用:
find . -type f -name 'result.*' -exec sh {} \;&
我认为您的解决方案在后台运行查找程序,而不是在后台执行每个 shell 脚本。我自己尝试使用 find 实用程序,但无法使其正常工作。但是,以下 shell 脚本将执行您的要求。
#!/bin/bash
for prog in result.*
do
sh $prog &
done
exit 0
或 1 行的等效指令
每批 find
结果仅启动 sh
一次,并让它根据需要分叉出尽可能多的子进程,效率更高。
find . -type f -name 'result.*' -exec sh -c 'for arg do . "$arg" & done' _ {} +
. "$arg" &
分叉出 already-running 解释器的副本并在其中运行 "$arg"
中的代码,避免额外支付解释器启动成本。