我有50个shell脚本:proc_0.sh,proc_500.sh,proc_1000.sh ... proc_25000.sh.
它们每个都在不同的文件上执行相同的操作.
我想一个接一个地在一个主shell脚本中执行所有这些shell脚本.
这是我到目前为止所尝试的:
#!/bin/bash/
cd $(pwd)
i=0
for i in {0..25000..500}
do
chmod +x proc_${i}.sh
bash proc_${i}.sh
done
exit
Run Code Online (Sandbox Code Playgroud)
现在,我不确定这一点,但似乎这些脚本并行运行或以某种方式混淆.我这样说是因为当我单独运行这些脚本中的一些时,它们会给出正确的结果,但不能以上述方式运行.也可能是这些脚本正在执行的程序可能存在问题.
那么,有谁能告诉我这是否是一个接一个地运行多个shell脚本的正确方法?这将有助于我缩小问题的范围.
谢谢
不,你这样做有点乱.
#!/bin/bash/
Run Code Online (Sandbox Code Playgroud)
删除最后一个斜杠或它将无法正常工作
cd $(pwd)
Run Code Online (Sandbox Code Playgroud)
这cd .
与当前目录中的.cd 相同是伪造的.从脚本中删除它.
i=0
Run Code Online (Sandbox Code Playgroud)
你也可以删除它:接下来是一个已经初始化$ i的for循环
chmod +x proc_${i}.sh
Run Code Online (Sandbox Code Playgroud)
每次运行此脚本时,都会显式设置执行标志.它没有坏处,但一旦足够.
bash proc_${i}.sh
Run Code Online (Sandbox Code Playgroud)
您不需要使用"bash"语句.无论如何,它都不会运行,因为您忘记了命令的路径.除非您从/ usr/local/bin这样的目录运行它:始终使用路径!
不,您的脚本不是并行运行的.你忘了背景了.
试试这个:
#!/bin/bash
for i in {0..25000..500}
do
/path/to/proc_${i}.sh & #<- don't forget to replace "/path/to" with the
done # real directory where the proc_ files reside
wait
Run Code Online (Sandbox Code Playgroud)
这将使您的计算机同时充满您的50个进程.
跑去top
看他们跑.
如果您将所有这些proc脚本一起放在一个子目录中然后运行,那将是最好的:
#!/bin/bash
for i in "/path/to/procscripts/"*
do
"$i" &
done
wait
Run Code Online (Sandbox Code Playgroud)
这将使自己更灵活,更轻松.
此外,使所有脚本可执行可以更容易:
chmod a+x "/path/to/procscripts/"*
Run Code Online (Sandbox Code Playgroud)