Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在Unix中同时搜索和执行两个脚本?_Shell_Unix_Sh_Aix - Fatal编程技术网

Shell 如何在Unix中同时搜索和执行两个脚本?

Shell 如何在Unix中同时搜索和执行两个脚本?,shell,unix,sh,aix,Shell,Unix,Sh,Aix,假设您有一个包含两个文件的文件夹 示例:停止tomcat\u center.sh和启动tomcat\u center.sh 在我的示例中,ls*tomcat*的返回返回这两个脚本。 如何同时搜索和执行这两个脚本 我试过了 ls *tomcat* | xargs sh 但是只执行第一个脚本(而不是第二个脚本)。并行执行多项任务的简单方法是使用GNU parallel: parallel ::: ./*tomcat* 或者,如果脚本的第一行没有shebang: parallel bash :::

假设您有一个包含两个文件的文件夹

示例:
停止tomcat\u center.sh
启动tomcat\u center.sh

在我的示例中,
ls*tomcat*
的返回返回这两个脚本。 如何同时搜索和执行这两个脚本

我试过了

ls *tomcat* | xargs sh

但是只执行第一个脚本(而不是第二个脚本)。

并行执行多项任务的简单方法是使用GNU parallel:

parallel ::: ./*tomcat*
或者,如果脚本的第一行没有shebang:

parallel bash ::: ./*tomcat*

或者如果您喜欢
xargs

ls *tomcat* | xargs -P 2

您可以执行以下操作来搜索和执行

find . -name "*.sh" -exec sh x {} \;

find将查找文件,exec将查找匹配项并执行

xargs缺少
-n 1
选项

man xargs

ls *tomcat* | xargs -P 2
-n最大参数,--max args=max args

每个命令行最多使用max args参数。如果超出大小(请参阅-s选项),则将使用小于max args的参数,除非指定了-x选项,在这种情况下,xargs将退出

否则,xargs会尝试使用尽可能多的参数执行命令,这对大多数命令都有意义

在您的情况下,
ls*tomcat*| xargs sh
正在运行
sh stop_tomcat_center.sh start_tomcat_center.sh
,stop_tomcat_center.sh可能只是忽略了
$1
参数


此外,使用ls的输出也不是一个好主意。更好的方法是使用
find-maxdepth 1-name'*tomcat*'-print0 | xargs-0-n1sh
作为*tomcat*中的命令;执行sh“$command”;完成


这个答案基于这样一个假设,即OP在“同时”编写时的意思是“使用一个命令行同时执行两个命令”。


有关并行执行的解决方案,请查看其他答案。

同时停止和启动tomcat似乎不太明智……您可以使用UNIX的
功能。我的答案或其他答案解决了您的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢对于并行执行,您需要
| xargs-n1-Px
,其中
x
是所需的并发性,我认为。@bobah我确信OP在“同时”编写时并不是指“并行”,他只是指使用一个命令行同时执行。(并行运行停止/启动没有多大意义)