将输入参数从 bash 脚本移动到可执行文件

Move input arguments from bash script to executable

我目前正在尝试编写一个 bash 脚本,它 运行 是我的可执行文件,带有一些输入参数。大多数输入参数都在脚本内部设置,其中一些参数传递给 bash 脚本并进行评估。我现在需要的是概括脚本,所以如果我想设置我的可执行文件已知的其他输入,那么我想将它们写在 bash 脚本输入中。换句话说,我的 bash 脚本在命令的末尾执行:

./executable.o -L  -g $g -h  -w 0.01 -th $thread_num -m 0 -w 0.01 -r $r -op $operator -fun  -s $site -b 0 -scale 1 -ch 1  -mu 10 >& ${filename}.log

其中变量是根据输入参数预先计算的。我 运行 bash 脚本为:

sh script.sh 14 0.8 0.05 0 3 0 16

(这也是从另一个 bash 脚本调用的,该脚本 运行 多次使用不同的输入编写脚本)。我的问题是我的可执行文件知道很多不同的 input/flags,例如 -hn、-hs、-gn、-gs、-dt,...我不想为它们中的每一个定义一个显式输入脚本。此外,有时我想 运行 脚本没有附加标志。有没有办法将 bash 脚本执行为:

sh script.sh 14 0.8 0.05 0 3 0 16 -hn 1 -hs 0.2 -dt 0.1 

将最后一个参数 (-hn 1 -hs 0.2 -dt 0.1) 移动到可执行文件的位置?我的可执行文件还可以从 input.txt 中读取标志,因此我可以将所有内容移动到一个 .txt 文件中,但是如果我要 运行 数百个这样的脚本,那么我会把所有这些文本文件搞得一团糟。我很感激 help/suggestions! (更准确地说,bash 脚本是集群上的 运行ner 脚本,支持 jobarray,因此 script.sh 是 运行 作为 slurm 上的作业数组,但我不'认为这很重要) 我也post这里的真实脚本以防万一: https://pastebin.com/xyF6ZbV8

如果我没理解错的话,你在脚本中处理了 7 个参数,所有其他参数应该只给你可执行文件?

试试这个:

./executable.o [... all your stuff ...] "${@:8}"  >& ${filename}.log

"${@:8}" 的计算结果为您为 bash 脚本提供的参数数组,从位置 8 开始,以空格分隔。