让我们的加密允许您指定多个允许的域:
certbot certonly -d foo.example.com -d bar.example.com
是否有一种管道用逗号分隔的字符串,以便每个分隔的元素用作参数?像这样:
echo 'foo.example.com,bar.example.com' | magic_function 'certbot certonly {-d}'
这类似于xargs
,但我希望所有令牌最终都分配给同一进程。
(事实证明certbot只会接受以逗号分隔的域列表,但是如果不接受,该怎么办?)
答案 0 :(得分:3)
我认为这需要使用数组来实际构建命令。假设您有一个以逗号分隔的URL列表作为输入。首先将它们读入数组
inputStr='foo.example.com,bar.example.com'
IFS=, read -ra urlList <<<"$inputStr"
现在使用数组使用-d
开关构造命令。
domainList=()
for url in "${urlList[@]}"; do
domainList+=(-d "$url")
done
现在将构造的数组传递给命令
certbot certonly "${domainList[@]}"
对此进行扩展,简单地说就是使它成为一个包含URL列表并在其上运行命令的函数
runCertbot() {
(( $# )) || { printf 'insufficient args provided\n' >&2; return 1; }
IFS=, read -ra urlList <<<"$@"
domainList=()
for url in "${urlList[@]}"; do
domainList+=(-d "$url")
done
certbot certonly "${domainList[@]}"
}
并调用以下函数
runCertbot 'foo.example.com,bar.example.com'
答案 1 :(得分:1)
怎么样
certbot certonly -d $(echo 'foo.example.com,bar.example.com' | sed -e 's/,/ -d /')
'sed'用'-d'替换每个逗号。您只需要添加前导“ -d”。