shell 如何使用SH从文本文件创建列表?

bkhjykvo  于 2022-11-16  发布在  Shell
关注(0)|答案(4)|浏览(251)

我需要创建一个SH脚本来读取包含目录列表的文件

dirA
dirB
dirC

并使用此信息生成如下命令:

go test -coverprofile=coverage.out dirA dirB dirC

包文件名为.package-list,这是我目前拥有的脚本:

while read package;
do
  go test -coverprofile=coverage.out ./$package
done <.package-list

问题在于该脚本执行go test命令三次:

go test -coverprofile=coverage.out ./dirA
go test -coverprofile=coverage.out ./dirB
go test -coverprofile=coverage.out ./dirC

如何读取文件并生成所需的命令?

eanckbw9

eanckbw91#

如果使用bash而不是sh(您已经标记了两个shell,所以不清楚您的目标shell是哪个),您可以将文件的行读入数组:

readarray -t packages < .package-list
go test -coverprofile=coverage.out "${packages[@]}"
pw136qt2

pw136qt22#

使用xargs

xargs go test -coverprofile=coverage.out < .package-list
1l5u6lss

1l5u6lss3#

如果文件不是特别大,只要目录名本身不包含换行符,就可以一次将整个文件读入数组:

IFS=$'\n'  # To split on new lines only
dirs=( $(<.package-list) )
go test -coverprofile=coverage.out "${dirs[@]}"
uubf1zoe

uubf1zoe4#

另一个选项:

go test -coverprofile=coverage.out $(cat .package-list | tr '\n' ' ')

相关问题