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在“同时”编写时并不是指“并行”,他只是指使用一个命令行同时执行。(并行运行停止/启动没有多大意义)