1

我正在使用 FPM 创建 Debian 软件包,但遇到了一个小问题。我的 bash 脚本需要 5 个参数。

TARGET=$1
VERSION=$2
DESCRIPTION=$3
DEPENDENCIES=$4
REVISION=$5

麻烦的是 $4,我将以下字符串传递给它

-d "apt-transport-https > 0.8.16~exp12ubuntu10.15" -d "mongodb > 1:2.0.4-1ubuntu2" -d "ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"

双引号在我的字符串中被转义,所以当 I 时echo $DEPENDENCIES,引号正确显示。

FPM 使用-d标志可以多次使用,我需要能够将参数列表从我的脚本传递给 fpm。

我想做类似的事情:

fpm ...blah blah details... $DEPENDENCIES path

$DEPENDENCIES 应该将多个标志传递给 fpm,但它似乎只识别第一个。如果我手动写出参数,它可以正常工作,但尝试使用字符串传递参数是行不通的。

我不确定发生了什么。帮助?

4

1 回答 1

9

这将有助于阅读: http: //mywiki.wooledge.org/BashFAQ/050

如果我是你,我会重新排列你的参数

#!/bin/bash
TARGET=$1
VERSION=$2
DESCRIPTION=$3
REVISION=$4
shift 4
DEPENDENCIES=( "$@" )

依赖关系是参数的“所有其余部分”,正确分开。您将像这样调用您的脚本

./script tgt ver "this is the description" rev-1.1.1 -d "apt-transport-https > 0.8.16~exp12ubuntu10.15" -d "mongodb > 1:2.0.4-1ubuntu2" -d "ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"

在您的脚本中,DEPENDENCIES 数组将包含这些元素

DEPENDENCIES[0]=-d 
DEPENDENCIES[1]="apt-transport-https > 0.8.16~exp12ubuntu10.15" 
DEPENDENCIES[2]=-d 
DEPENDENCIES[3]="mongodb > 1:2.0.4-1ubuntu2" 
DEPENDENCIES[4]=-d 
DEPENDENCIES[5]="ntp > 1:4.2.6.p3+dfsg-1ubuntu3.1"

在您的脚本中,调用 fpm 如下:

fpm ...blah blah details... "${DEPENDENCIES[@]}" path
于 2013-10-16T01:19:06.683 回答