如何在并行执行多个Perl脚本时仅输入一次共享文件名?
简化Perl脚本批量执行的文件名输入
当然有办法啦!你现在重复输入同一个文件名确实挺繁琐的,这里给你几个实用的简化方案,根据你的需求选就行:
方法1:使用Shell变量
先把文件名存到一个变量里,后面直接引用这个变量就行,简单直观:
# 定义文件名变量 FILE="textfile.txt" # 执行所有脚本,引用变量 perl myscript1.pl "$FILE" & perl myscript2.pl "$FILE" & perl myscript3.pl "$FILE" & perl myscript4.pl "$FILE" & perl myscript5.pl "$FILE" & perl myscript6.pl "$FILE" & perl myscript7.pl "$FILE" & perl myscript8.pl "$FILE"
用双引号包裹变量是个好习惯,能避免文件名里有空格或者特殊字符时出问题。
方法2:用循环批量处理(推荐)
如果你的脚本命名有规律(比如像这样从1到8编号),用Shell循环能大幅减少重复代码,后期加脚本也方便:
FILE="textfile.txt" # 利用大括号扩展生成所有脚本名,循环执行 for script in myscript{1..8}.pl; do perl "$script" "$FILE" & done # 可选:如果需要等待所有后台脚本都执行完再继续,加上wait命令 wait echo "所有Perl脚本执行完毕!"
如果脚本命名没规律,也可以手动列出所有脚本名:
FILE="textfile.txt" # 把所有脚本名放进数组里 scripts=(myscript1.pl myscript2.pl myscript3.pl myscript4.pl myscript5.pl myscript6.pl myscript7.pl myscript8.pl) # 遍历数组执行 for script in "${scripts[@]}"; do perl "$script" "$FILE" & done wait
补充小提示
- 后台运行的
&会让每个脚本在后台并行执行,如果你想让它们依次执行(前一个跑完再跑下一个),去掉&就行。 - 用
wait命令可以让当前Shell等待所有后台启动的脚本都完成,适合需要后续统一处理结果的场景。
内容的提问来源于stack exchange,提问作者sisuz
相关产品推荐
相关产品推荐

