我有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
现在,我不确定这一点,但似乎这些脚本并行运行或以某种方式混淆。我这样说是因为当我单独运行这些脚本中的一些时,它们会给出正确的结果,但不能以上述方式运行。也可能是这些脚本正在执行的程序存在问题。
那么,有人可以告诉我这是否是一个接一个地运行多个shell脚本的正确方法?这将有助于我缩小问题范围。
由于
答案 0 :(得分:5)
不,你这样做有点乱。
#!/bin/bash/
删除最后一个斜线或不起作用
cd $(pwd)
这与当前目录中的cd .
.cd相同是伪造的。从脚本中删除它。
i=0
你也可以删除它:接下来是一个已经初始化$ i的for循环
chmod +x proc_${i}.sh
每次运行此脚本时,都会显式设置执行标志。它没有坏处但只要一次就足够了。
bash proc_${i}.sh
您不需要使用“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
这将使您的计算机一次充满50个进程。
运行top
以查看它们正在运行。
最好只将所有这些proc脚本放在一个子目录中,然后运行:
#!/bin/bash
for i in "/path/to/procscripts/"*
do
"$i" &
done
wait
这将使自己更灵活,更轻松。
此外,使所有脚本都可执行起来可能更容易:
chmod a+x "/path/to/procscripts/"*