使用另一个 bash 脚本中的命名参数运行命令行

Run command line with named arguments from another bash script

提问人:Steve 提问时间:9/7/2022 最后编辑:Steve 更新时间:9/14/2022 访问量:727

问:

我有一个脚本,它采用参数的名称及其值,如下所示:

script1.sh --netId netIdValue

但是,我想在另一个脚本中多次调用此命令,以获取 netId 参数的不同值。 因此,在 script2.sh 中,我想从.txt文件中读取netIdValue的值,然后调用相同的命令,如下所示:

while IFS= read -r line; do
    netIdValue=$line
    ./script1.sh --netId $netIdValue
done < netNames.txt

但是,这失败了,似乎问题在于它没有正确地接受 --netId。 如何在 script2.sh 中传递参数名称及其值?

Linux Bash 传递 命令行参数

评论

1赞 glenn jackman 9/7/2022
你真的有还是错别字?你想要IFS-IFS=
2赞 glenn jackman 9/7/2022
netNames.txt 是否包含行尾?\r\n
1赞 Charles Duffy 9/7/2022
(1) 运行脚本并读取发出的跟踪日志(并将它们编辑到问题中)。(2) 在您的问题中包含错误信息;让我们评估一下它“看起来”是什么。(3)格伦上面的评论几乎可以肯定是你的问题。bash -x yourscript
0赞 Charles Duffy 9/7/2022
顺便说一句,这不会帮助你在这里解决问题,但上面的代码应该如何引用。--netId "$netIdValue"
1赞 Charles Duffy 9/8/2022
(另外,为什么要使用变量而不是将值直接放入您想要的名称中?lineread -r netIdValue

答:

1赞 James Risner 9/14/2022 #1

我的 script1.sh 是:

#!/bin/sh
echo "$1" "$2" - "$#"

如果您的 ID 位于文件中,每行一个,请执行以下操作:

% cat file
1
2
% cat file | \
    xargs -I {} ./script1.sh --netId {}
--netId 1 - 2
--netId 2 - 2

如果您的 ID 位于用空格分隔的一行上,请执行以下操作:

% cat file
1 2
% cat file | tr ' ' '\0' | \
    xargs -0 -I {} ./script1.sh --netId {}
--netId 1 - 2
--netId 2 - 2

对于分隔,我使用将空格转换为空格 (\0),并使用选项将输入分隔为 null。trxargs -0