采购后未设置环境变量.带有Ansible和shell的流浪供应



i通过使用Ansible使用变量同时附加/etc/bash.bashrc$HOME/.bashrc

Ansible完成后,两个文件看起来如下。

/etc/bash.bashrc中:

...
export VAR1="some text comes here"
...

$HOME/.bashrc中:

...
export VAR2="other text comes here"
...

因此,Ansible的工作完美。

vagrantfile中的shell脚本,该脚本在可安排完成后运行:

$init = <<-SCRIPT
whoami
echo $HOME
cat /etc/bash.bashrc
cat $HOME/.bashrc
source /etc/bash.bashrc
source $HOME/.bashrc
echo "VAR1 :: $VAR1"
echo "VAR2 :: $VAR2"
SCRIPT
config.vm.provision :init, type: :shell, inline: $init, privileged: false

,即使两个变量设置在两个文件中,然后两个文件都采购,输出为:

vagrant
/home/vagrant
---> /etc/bash.bashrc contains the export
---> $HOME/.bashrc contains the export as well
VAR1 ::
VAR2 ::

我们看到两个变量未设置并提供空字符串。

我尝试了$HOME/.profile,但结果相同。

您是否知道该如何进行?

/etc/bash.bashrcsource $HOME/.bashrc包含变量分配是不够的。变量分配实际上必须有机会执行。

如果您查看两个脚本的来源(以下来自Debian的示例),它们包含在非交互式外壳中调用时破坏执行的行:

  • /etc/bash.bashrc

    # If not running interactively, don't do anything
    [ -z "$PS1" ] && return
    
  • $HOME/.bashrc

    # If not running interactively, don't do anything
    case $- in
        *i*) ;;
          *) return;;
    esac
    

因此,即使您明确源源来源源,如果您在这些条件后插入export VAR1="some text comes here"export VAR2="other text comes here"行,当配置脚本以非相互作用外壳运行时,它们也永远不会执行。

您实际上并未显示如何插入变量分配行,但是您说" append "它们。如果使用Ansible的lineinfile模块,则可以添加insertbefore参数,以确保将这些行放置在脚本退出之前。

相关内容

  • 没有找到相关文章

最新更新