bash_profile 未与 Chef-run 一起生效

2023-12-03

如果我与厨师一起运行以下食谱,则会添加条目~/.bash_profile,但是当我这样做时echo $PATH or echo $JAVA_HOME,命令行返回空白值。那里发生了什么事?

ruby_block  "set-env-java-home" do
  block do
    ENV["JAVA_HOME"] = node['java']['path']
    ENV['PATH'] = "#{ENV['PATH']}:#{node['java']['path']}/bin"
  end
  not_if { $JAVA_HOME == "#{ENV['JAVA_HOME']}" && $PATH = "#{ENV['PATH']}:#{node['java']['path']}/bin" }
end

bash 'set-env-bashrc' do
  code <<-EOH
    echo -e "export JAVA_HOME=$JAVA_HOME" >> ~/.bash_profile
    echo -e "export PATH=$PATH" >> ~/.bash_profile
    source ~/.bash_profile
  EOH
end

这里有一些事情:

Your not_if是错的

not_if { $JAVA_HOME == "#{ENV['JAVA_HOME']}" && $PATH = "#{ENV['PATH']}:#{node['java']['path']}/bin" }

你在这里混淆了 Ruby 和 bash。在红宝石中$JAVA_HOME指的是全局常数。我不清楚你的是什么not_ifGuard 正在努力实现这一目标,但按原样使用它肯定是不正确的。

使用 bash 代替原始资源

您正在使用 Bash 将内容回显到文件中。这是一份完美的工作file or template资源。这将是幂等的并正确处理通知:

file '~/.bash_profile` do
  content <<-EOH
    export JAVA_HOME=$JAVAHOME
    export PATH=$PATH
  EOH
end

但是,值得注意的是,您拥有的脚本什么也不做。您正在设置的值JAVA_HOME and PATH对他们自己。您可能想使用#{ENV['JAVA_HOME']}反而。

Bash 是一个子 shell 资源

当您使用bash(或任何执行资源),您正在子 shell 中执行,所以像source or export不会持久化到父进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash_profile 未与 Chef-run 一起生效 的相关文章

  • Bash:查找并连接文件

    我有以下结构 home DIR1 file ab csv DIR2 file cd csv DIR3 file3 ef csv Where file csv包含多行浮点数 每个 DIR 都有不同的浮点数 我想抓取所有的内容file csv文
  • envsubst 不能进行就地替换吗?

    我有一个配置文件 其中包含一些 ENV VARIABLE 样式的变量 This is my file It might contain EXAMPLES of text 现在我希望将该变量替换为保存在实际环境变量中的值 所以我正在尝试这个
  • bash、zsh :声明 [*] (天哪)

    我正在使用具有以下语法的 bash 脚本 declare a THIS 这在 zsh 中似乎是非法的 我收到 未找到匹配项 THIS 错误 谁能帮我把它翻译成 zsh 吗 另外 什么是 语法是什么意思 我知道我们正在声明一个数组 但为什么要
  • -bash: gulp: 在 Mac 中找不到命令

    我尝试在 mac 中安装 gulp 如下所示 Is iMac itop npm root Users itop node modules Is iMac itop npm config set prefix usr local Is iMa
  • 如何在 Windows 上为“flask run”设置环境变量?

    我刚刚开始学习 Flask 我一直停留在设置 Flask 环境变量上 我不知道如何设置环境变量 每当我使用flask run命令 我遇到以下错误 错误消息 无法找到 Flask 应用程序 您没有提供 FLASK APP 环境变量 并且在当前
  • 将所有脚本参数复制到另一个变量

    我需要复制所有脚本参数并将它们传递给另一个脚本 我尝试这样做 args printargs sh args echo printargs sh args 但在这种情况下 如果我使用包含空格的参数调用我的父脚本 例如 script sh ar
  • 为什么 SSH 远程命令获得的环境变量比手动运行时少? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如果我 ssh 到计算机并运行它 我有一个命令可以正常运行 但当我尝试使用远程 ssh 命令运行它时会失败 例如 ssh user IP
  • IFS 分隔一个字符串,如“Hello”,“World”,“this”,“is,一个无聊”,“line”

    我正在尝试解析 csv 文件 但 IFS 遇到一些问题 该文件包含如下行 Hello World this is a boring line 各列用逗号分隔 因此我尝试使用以下代码分解该行 IFS read r a tempArr lt l
  • 将终端颜色扩展到行尾

    我有一个生成 motd 的 bash 脚本 问题取决于某些终端设置 我不确定颜色是否会延伸到行尾 其他时候则不然 e g v s IIRC 一个只是普通的 gnome 终端 另一个是我的 tmux 术语 所以我的问题是如何才能将其扩展到 8
  • bash 函数保留制表符补全

    我把函数 make color make 1 ccze A in bashrc获得彩色的 make 输出 他的作品很好 但是make用于选择目标的制表符补全功能丢失 有什么方法可以保留函数中命令的制表符完成 或者我可以做其他事情来实现制表符
  • 为 PyCharm 中的所有配置设置相同的环境变量

    我有一个与 Celery 和很多不同的工作人员一起的项目 如何避免每次将 PyCharm 中的环境变量复制粘贴到每个运行 调试配置 有什么方法可以在项目设置中设置它们吗 找到解决方案here https stackoverflow com
  • 如何复制每个扩展名为 X 的文件,同时保留原始文件夹结构? (类Unix系统)

    我正在尝试将每个 HTML 文件从 src 文件夹复制到 dist 文件夹 但是 我想保留原始文件夹结构 如果 dist 文件夹不存在 我想创建一个新文件夹 如果文件夹不存在则创建 d dist mkdir dist 复制每个文件 cp R
  • 哎呀,看起来像出事了。拉拉维尔 5.1

    我有这样的路线 http localhost inspection show id 当我尝试同时加载路线时 在不同的选项卡中 有时其中一些选项卡会出现错误 哎呀 看起来出了问题 在不同选项卡中加载速度如此之快 http localhost
  • 如何在 mac 中使用“getopt”命令让 bash 处理长参数?

    我想让我的 bash 脚本处理长参数 我发现getopt 但 OS X 不支持它 谁能告诉我为什么getoptBSD 实现了 GNU 没有实现 我尝试构建getopt在 GNU C lib 中 但由于我对 Linux 的技能不佳而失败了 有
  • MP4 到 DASH(bash 脚本)

    我有一个网站 用户可以在其中上传视频文件 我想使用 DASH 流式传输所有内容以获得自适应比特率流式传输 因此 我编写了一个 bash 脚本 由 cron 运行 将所有 mp4 文件转换为 DASH 但它无法正常工作 出了什么问题 例如 使
  • 调用 LWRP 时的 Cookbook 名称前缀

    Summary 我可以使用外部说明书中的 LWRP 而不添加说明书名称前缀吗 例如 如果mycookbook包含mylwrp资源 我该怎么做 include recipe mycookbook Contains mylwrp mylwrp
  • 如何显示 NUL 分隔数据的中间管道结果?

    如何组合以下两个命令 find print0 grep z pattern tr 0 n find print0 grep z pattern xargs 0 my command 进入单个管道 如果我不需要 NUL 分隔符那么我可以这样做
  • 如何将长选项与 Bash getopts 内置一起使用?

    我正在尝试解析 tempBash getopts 的选项 我这样调用我的脚本 myscript temp foo bar someFile 这是我用来解析选项的代码 while getopts temp shots o option do
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 为什么减法返回 - 符号

    我对简单的减法有疑问 但我不明白出了什么问题 我的代码 start date s N cut b1 13 Treatment end date s N cut b1 13 delta expr end start echo delta de

随机推荐

  • C# 中的元帅“char *”

    给定 DLL 中的以下 C 函数 char GetDir char path 您如何将这个函数 P Invoke 到 C 中并正确封送 char NET 似乎知道如何执行 LPCTSTR 但是当我无法找出任何不会导致调用此函数时引发 Not
  • 如何提供overlayfs的嵌套挂载

    我尝试将overlayfs的层安装为下一个overlayfs的下层 但是在两层之后它崩溃了 mount t overlayfs o rw lowerdir tmp test layers centos5 6 layer0 lower upp
  • Matplotlib:关闭轴并同时设置面部颜色不可能吗?

    有人可以解释为什么这个简单的代码在设置轴关闭时不会执行facecolor命令吗 fig plt figure 1 ax fig add subplot 211 facecolor 0 0 0 aspect equal ax scatter
  • PHP可以根据版本切换吗?

    我的 PHP 脚本之一中有一个函数依赖于 5 3 版本来运行 我认为如果它所在的函数在 PHP 5 2 或更早版本的服务器上运行时没有被调用 那么它就会被忽略 然而 事实证明 当该脚本及其内部的类被包含时 PHP 就会退出并停止执行 如果我
  • 以闪亮的方式显示本地驱动器中的pdf

    我对 r 和闪亮还是个新手 我对原本应该是简单的逻辑感到困惑 我试图在 imageOutput 小部件中显示 pdf 文件 但没有成功 有人可以引导我走向正确的方向吗 示例 ui R shinyUI pageWithSidebar main
  • WordPress - 以编程方式在页面中插入 Elementor 小部件

    我在我的 WordPress 网站上安装了 Elementor Pro 并且正在编写一个自定义插件 该插件将执行一些操作并以编程方式创建一个新页面 我能够创建页面 但问题是 我想以编程方式在这个新页面中插入 Elementor Widget
  • 使用 PHP 将文本文件行转换为数组

    如何使用 PHP 将文本文件的行放入数组中 谢谢 array file filename txt
  • 无法使用“knitr”中的“beamer_presentation”选项交叉引用图形和表格

    为什么 ref 符号无法与投影仪演示一起操作 下面的问题可能会提醒您在编写PDF文档时交叉引用的一些问题 例如 this 但是当我进行投影仪演示时 答案中介绍的方法对我没有帮助 现在我很困惑因为 ref fig label to refer
  • r 中向量内的数字相加

    我有一个向量 v lt c 1 2 3 我需要按以下方式添加向量中的数字 1 1 2 1 2 3 产生第二个向量 v1 lt c 1 3 6 这可能很简单 但我有点卡住了 使用累积和函数 cumsum v 1 1 3 6
  • 在 PHP 中访问对象成员

    我正在 PHP 中调用 WCF 服务 它返回以下内容 我调用的服务返回 C 结构 object stdClass 70 1 SiteInterop CreateContactAndOpportunityResult gt object st
  • 使用 Restful API 进行 Birt

    我正在为 PHP 项目开发 BIRT 报告 我可以通过使用 JDBC 数据源直接连接到数据库来轻松开发报告 然而 某些数据来自 Restful api 我无法从这些 api 端点创建数据源 Birt 可以选择从 Web 服务创建数据源 但这
  • ArrayBufferView 构造函数中的奇怪限制[重复]

    这个问题在这里已经有答案了 The TypedArray 规范声明可以通过以下方式创建 ArrayBufferView TypedArray ArrayBuffer buffer optional unsigned long byteOff
  • 如何在 C 中封装这样的函数?

    我想写一个结构体来封装一些函数 如下所示 typedef struct Operate void op fun size t result type unsigned int arg count size t arg type Operat
  • Spring Data Rest 中的 @OneToMany stackoverflow

    我有一个问题实体 其选项列表如下 OneToMany mappedBy question List
  • 如何在 es6 javascript 类中使用 async/await?

    所以我试图为我创建的类创建一个异步函数 但是 webpack 在编译该类时给了我一个错误 我的代码将是这样的 class MyClass constructor apiService this apiService apiService a
  • 如何解析多维参数的url参数?

    我使用 python 3 并且需要将请求 uri 参数转换为字典 我的示例网址是 http example com item test1 foo abc 0 6 foo 在 PHP 中 GET获取具有多维数组的字典 如下所示 Array i
  • R中的parent.frame()和parent.env()有什么区别;它们在引用调用方面有何不同?

    如果有人可以用一个简单的例子来说明这一点 那会有帮助吗 另外 什么地方有用parent frame 代替parent env 反之亦然 parent env是定义闭包 例如函数 的环境 parent frame是调用闭包的环境 f func
  • JNA:本机库依赖项和 JAR 提取

    我将通过 JNA 访问 MSP430 dll 请参阅此处 但该库依赖于与 MSP430 dll 捆绑在一起的其他本机库 这个依赖的本机库称为 HIL dll 使用 jna library path 一切都可以完美工作 现在我会将本机库捆绑到
  • 禁用右键单击特定的

    Closed 这个问题需要调试细节 目前不接受答案 这是我的示例代码 html div This is the Phone and NO ONE SHOULD RIGHT CLICK THIS gt img class tlClogo sr
  • bash_profile 未与 Chef-run 一起生效

    如果我与厨师一起运行以下食谱 则会添加条目 bash profile 但是当我这样做时echo PATH or echo JAVA HOME 命令行返回空白值 那里发生了什么事 ruby block set env java home do