通过vagrant Provisioning命令在Ubuntu中将-d标志与read命令一起使用

时间:2018-12-24 19:19:34

标签: shell ubuntu vagrant yaml

作为Vagrant中配置任务的一部分,我正在使用shyaml解析yaml文件并为各种项目创建虚拟主机文件。在我的特定情况下,我正在尝试设置环境变量。

我的Yaml文件如下:

sites:
    site1:
        ...
        env:
          DB_NAME: example
          DB_USER: root
          DB_PASSWORD: root
          DB_HOST: localhost
          TABLE_PREFIX: www_

根据文档,我应该使用以下代码来获取映射的键和值:

#!/bin/sh

readLine() {
    while [ "$1" ]; do
        IFS=$'\0' read -r -d '' "$1" || return 1
        shift
    done
}

cat 'file.yml' | shyaml key-values-0 sites.site1.env |
while readLine key val; do
  ...
done

但是,如果我在Vagrant(Ubuntu 16.04)中运行此程序,则会出现以下错误:

test.sh: 4: read: Illegal option -d 
close failed in file object destructor: 
sys.excepthook is missing 
lost sys.stderr

我还尝试将shebang设置为:#!/bin/bash#!/usr/bin/env bash,但是每当我向vagrant和$run sh test.sh转换时。我会得到那个错误。

1 个答案:

答案 0 :(得分:0)

好-我改变了Vagrant通过使用内联供应并使用/ bin / bash运行脚本来运行供应脚本的方式。因此:config.vm.provision :shell, inline: '/bin/bash ' + File.join( 'provision', 'test.sh' )