【问题标题】:bash resource doesn't seem to be loading my .bashrc filebash 资源似乎没有加载我的 .bashrc 文件
【发布时间】:2014-03-14 05:35:06
【问题描述】:

我在尝试通过 bash Chef 资源加载我的 .bashrc 文件时遇到了一些问题。我的.bashrc 位于/sh/.bashrc 这是我的资源代码:

bash "Source .bashrc" do
    cwd "/home/ameya"
    user "ameya"
    code "source /sh/.bashrc"
    action :run
end

我的.bashrc 只有以下一点:

export ME=ameya

所以当我在终端输入echo $ME 时,我希望看到它打印出ameya,但什么都没有打印出来。我的设置方式有什么问题?提前致谢

【问题讨论】:

  • Chef 启动的 shell 获取您的文件与您自己的交互式 shell 在启动时获取文件有什么关系?环境变量是进程本地的——一旦发生source 命令的shell 退出,该命令就不再有任何影响(除了任何启动和遗留的子进程)。
  • 我想基本上为用户设置 ENV 变量,我看到的许多示例表明,您可以通过 bash 资源中的 environment 属性或通过采购来设置环境变量因为将值传递给 environment 属性很麻烦
  • bash 资源中的 environment 属性不会长期更改环境变量,也不会以适用于以后的交互式 shell 的方式更改环境变量——它只会为单个调用设置它们你是在告诉厨师跑。

标签: bash chef-infra chef-recipe


【解决方案1】:

用户ameya.bashrc/home/ameya/.bashrc。如果您希望它运行共享文件,您可以执行以下操作:

file "/home/ameya/.bashrc" do
  content "source /home/sh/.bashrc"
done

当 Chef 运行 /home/sh/.bashrc 时,效果只会在由 Chef 启动的单个 shell 实例运行时持续。如果您希望 .bashrc 文件的效果在每个交互式 shell 调用中生效,您需要安排在启动过程中将其作为 source'd。

【讨论】:

  • 那么我可以通过在我的 .bash_profile 中获取文件来长期做到这一点吗?
  • .bash_profile 每个登录 shell 运行一次,.bashrc 每个交互式 shell 运行一次。真的,您应该只在 .bash_profile 中设置环境变量,而根本不用为它们烦恼 .bashrc -- .bashrc 是不传播到子进程的设置的正确位置。
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2019-04-24
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多