我有abc.sh
文件和输入源(input.xyz
)。
我总是abc.sh
使用输入源执行文件(例如我输入sh abc.sh input.xyz
)但是,随着目录数量的增加,我懒得输入输入文件名。
如何将进程植入到abc.sh文件中执行而不是键入命令( sh abc.sh input.xyz
)?
目前的脚本是这样的
INPUT=$1
n="1"
numb=$(sed -n "$n"p $1)
#echo $numb
dummy="NULL"
谢谢你的评论,这是我的错误。当我运行脚本时我输入
sh abc.sh 000.xyz
每次我跑步时000.xyz
都会有不同的数字,所以.xyz
只是固定的。
答案1
可以使用 bash 循环遍历目录中所有可能的输入文件(例如 001.xyz、002.xyz 等)。将其放入单独的 BASH 脚本来组织您正在运行的内容可能会更容易(例如batch_run.sh)。
例如,您可以使用循环for
遍历当前目录中的每个 xyz 文件并abc.sh
在其上运行脚本:
for input_file in *.xyz
do
sh abc.sh $input_file
done
您提到您可能有多个目录。您也可以扩展通配符 (*) 以考虑目录(相对于您当前的位置):
for input_file in */*.xyz
do
sh abc.sh $input_file
done
如果您的脚本必须在与输入文件相同的目录中运行,您还可以cd
在循环中执行各种操作(例如),例如:
# remember the original directory before the for loop
original_directory = $(pwd)
# loop through all valid directories containing xyz files
for input_file in */*.xyz
do
# enter the directory of containing the xyz file
cd $(dirname $input_file)
# run the script on the xyz file
sh abc.sh $(basename $input_file)
# return to the original directory
cd ${original_directory}
done
它可能会变得或多或少复杂,具体取决于您想要执行的操作和您的规范,但是我希望这能让您了解 BASHfor
循环如何允许您自动重复命令。