Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash方法,便于调用具有大量参数的二进制文件_Bash - Fatal编程技术网

bash方法,便于调用具有大量参数的二进制文件

bash方法,便于调用具有大量参数的二进制文件,bash,Bash,试图找出自动化运行的最佳方法 一个需要大量参数并不断变化的命令 其中一些。目前的做法是: #!/bin/bash # 5 more of these VALUE=42 STUFF=12 CHARLIE=96 # Note that these are not sequential, just a bad example PARAM[0]='--oneparameter=17' PARAM[1]='--anotherparam=FOO' PARAM[2]='--yetanotherparam=

试图找出自动化运行的最佳方法 一个需要大量参数并不断变化的命令 其中一些。目前的做法是:

#!/bin/bash

# 5 more of these
VALUE=42
STUFF=12
CHARLIE=96

# Note that these are not sequential, just a bad example
PARAM[0]='--oneparameter=17'
PARAM[1]='--anotherparam=FOO'
PARAM[2]='--yetanotherparam=BAR'
PARAM[3]='--someparam4=314'
# the above continues for 15 parameters or so
# and then some ones like this one:
PARAM[16]="--someparam=astring${STUFF}.foo"
PARAM[20]="--someparam20=filename${VALUE}.foo"
然后我称之为二进制:

./mybinary ${PARAM[@]}
一切都很好

然后,我为第二次运行更改一些参数:

PARAM[1]='--anotherparam=BAR'
VALUE=84
# Here I need to include all lines that depends on VALUE
# for the parameter expansion to work
PARAM[20]="--someparam20=filename${VALUE}.foo"

./mybinary ${PARAM[@]}
这将持续30次左右

上面的工作,但它的丑陋和容易出错,但我不能 想出一个更好的办法! 非常感谢您的帮助


谢谢。

如果您知道要更改什么,可以在bash脚本中使用参数

/bin/bash your_bashfile change_value1 change_value2
然后在文件中,使用
$1
$2
引用参数

VALUE=$1
PARAM[1]="--someparam2=$2" 

可以编写一个函数,接受
作为参数,并相应地设置
参数
项。例如:

setParams() {
    VALUE=$1
    PARAM[0]='--someparam1=1'
    PARAM[1]='--someparam2=2'
    ...etc...
    PARAM[20]="--someparam20=filename${VALUE}.foo"
    PARAM[21]="--someparam21=filename${VALUE}.fee"
}
对于问题中提到的两次跑步,你会说

setParams 42
./mybinary ${PARAM[@]}
setParams 84
PARAM[1]='--someparam2=42'
./mybinary ${PARAM[@]}
(与
setParams
设置的默认值不同的任何参数都需要在
setParams
调用后设置。)

您可以使用循环:

for (( I = 0; I <= 15; ++I )); do
    PARAM[I]="--someparam$((I + 1))=$((I + 1))"
done
VALUE=84
for (( I = 16; I <= 20; ++I )); do
    PARAM[I]="--someparam${I}=filename${VALUE}.foo"
done

如果只是一小部分参数发生了变化,您可以循环这些参数

while read exuberance value attrition attitude spin badness; do
    ./mybinary --someparam1=17 \
            --someparam2="$exuberance" \
            --someparam2=BAR \
            --someparam2="$attrition" \
            # :
            --someparam20="astring${spin}.foo" \
            --someparam20="filename${value}.foo"
done <<____HERE
    42 317 xy Thirty7 vitamins 117
    41 3112 bb Virgo pizza 56
    41 3113 az Virgo pizza 37
    69 512 bee Ozone onion 99
____HERE
阅读时旺盛值磨损态度旋转不良;做
./mybinary--someparam1=17\
--someparam2=“$exuberance”\
--someparam2=巴\
--someparam2=“$磨耗”\
# :
--someparam20=“astring${spin}.foo”\
--someparam20=“filename${value}.foo”

完成我不确定是否不赞成指向外部工具,但这看起来像是我最近偶然发现的一个脚本可以帮助解决的问题:。它是一个getopts的包装器,使得定义命令行参数变得更加容易,而且由于它是在bash中编写的,它没有任何依赖项,您可以将它嵌入到其余代码中

有一个带有运行编号的循环怎么样,类似于$RUN中运行的循环;do./mybinary${run[@]};“完成”和“运行”指向该特定runMy示例的数组有点误导,请参阅更新。不使用连续数字。只是字符串和整数/浮点数的混合,没有可以计算的相关性。对不起@user2812403请参阅有关向数组声明多个值的另一种更简单方法的更新。这就是你的意思吗?谢谢你的时间!你的回答给了我一些新的想法+1尽管我似乎需要15个代表才能投票…@user2812403除了投票之外,你还可以点击你认为最有用答案的复选标记。不客气,谢谢。我想你应该能够回答这个或另一个问题,这样这个问题就不会再以未回答的形式出现。为了获得额外的分数,请开发here文档的内容,利用突出显示的颜色向俄罗斯当局传达有关人权的信息。
PARAM=(
    [0]='--oneparameter=17'
    [1]='--anotherparam=FOO'
    [2]='--yetanotherparam=BAR'
    [3]='--someparam4=314'

    [16]="--someparam=astring${STUFF}.foo"
    [20]="--someparam20=filename${VALUE}.foo"
)
while read exuberance value attrition attitude spin badness; do
    ./mybinary --someparam1=17 \
            --someparam2="$exuberance" \
            --someparam2=BAR \
            --someparam2="$attrition" \
            # :
            --someparam20="astring${spin}.foo" \
            --someparam20="filename${value}.foo"
done <<____HERE
    42 317 xy Thirty7 vitamins 117
    41 3112 bb Virgo pizza 56
    41 3113 az Virgo pizza 37
    69 512 bee Ozone onion 99
____HERE