代码之家  ›  专栏  ›  技术社区  ›  Itai Ganot Martin Ullrich

无法获取厨师烹饪书的来源。bashrc,我做错了什么?

  •  1
  • Itai Ganot Martin Ullrich  · 技术社区  · 6 年前

    我写了一本厨师烹饪书,里面配置了一些服务器 .bashrc 文件

    我想做的下一件事是 source 加载烹饪书添加的一些别名的文件。

    但无论我尝试什么,source命令都不会执行或不起作用,而且别名也会丢失。

    这是烹饪书的相关部分:

    bash 'create_command' do
      user 'ubuntu'
        code <<-EOH
          grep -q "\.isMaster.js" /home/ubuntu/.bashrc || echo "alias isMaster='/usr/bin/mongo localhost:27017 --quiet .isMaster.js'" | tee -a /home/ubuntu/.bashrc
    EOH
    end
    
    execute "source_bashrc" do
      command "bash -c 'source /home/ubuntu/.bashrc'"
    end
    

    以下是我尝试过的: 1、将源命令添加为bash“create\u command”代码的第二行。

    1. 在部分中添加了第二个块。

    2. 编辑命令行以:

      命令“source/home/ubuntu/”。bashrc“#”(不带“bash-c”)

    还尝试添加:

    script 'source_bashrc' do
    interpreter "bash"
    code <<-EOH
    #!/bin/bash
    source /home/ubuntu/.bashrc
    EOH
    end
    

    我也尝试过其他一些东西,但无论我做什么 。bashrc公司 文件不是source'ed。

    知道我做错了什么吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   coderanger    6 年前

    环境变量不是这样工作的。当您使用 source 在shell中,该shell进程计算文件并调用 setenv() 一堆(也许还有其他东西)。但这只会影响当前的流程(同样 bash chef-client )以及未来的子进程。子进程不能修改其父进程中的环境变量。这适用于所有操作系统,与厨师无关。因此 来源 确实有效,但它只适用于脚本的那一部分,因此它实际上什么都不做。

        2
  •  0
  •   olyv    6 年前

    这在@coderanger答案中有解释。我只能建议一种我觉得有用的解决方法。我创建了一个变量

    my_stuff_home = '/usr/local/share/my_stuff'

    然后我将其导出到bash\u概要文件以供将来使用

    echo 'export MY_STUFF_HOME=' | tr -d '\n' >> #{bash_profile} &&
              echo '#{my_stuff_home}' >> #{bash_profile} &&
              echo 'export PATH=$MY_STUFF_HOME/bin:$PATH' >> #{bash_profile}
    

    而且在我使用的同一配方中 my_stuff_home 变量,而不实际使用MY\u STUFF\u HOME和 source