gpt4 book ai didi

bash - 无法将 bash 命令嵌入 Chef Recipe

转载 作者:行者123 更新时间:2023-11-29 09:24:17 25 4
gpt4 key购买 nike

我正在尝试将 shell 命令嵌入到我的 Chef Recipe 中,但是当 Chef 执行该命令时,它似乎出错了。这是有问题的资源:

script "create libs symlink" do
interpreter "bash"
user "root"
cwd "/home/robin/test"
code <<-EOH
ln -s $(ls -1 | grep '^[0-9.-]\+$') curr-version-libs
EOH
end

/home/robin/test 目录包含一个名为 19.26-3 的文件夹,所以我期待一个名为 curr-version-libs 的符号链接(symbolic link)指向 19.26-3.

相反,我以循环符号链接(symbolic link)结尾:

drwxr-xr-x 4 root root  4096 Jan 17 22:35 19.26-3
drwxr-xr-x 2 root root 4096 Jan 17 22:35 config
lrwxrwxrwx 1 root root 17 Jan 28 17:31 curr-version-libs -> curr-version-libs

似乎 $(ls -1 | grep '^[0-9.-]+$') 被删除了,我以命令 ln -s curr-version-libs 结束

有人知道这是怎么回事吗?我试过使用 execute 资源,但我得到了相同的结果。

最佳答案

如果您的 19.26-3 目录在 chef run 开始之前就存在,那么这很容易。如果您要创建符号链接(symbolic link),我建议为此使用 link 资源。

version = `ls /home/robin/test/ -1 | grep '^[0-9.-]+$'`.strip

link "/home/robin/test/curr-version-libs" do
to ::File.join( "/home/robin/test", version )
end

但如果不存在,我建议使用 ruby​​_block 并动态定义您的链接资源。

ruby_block "create libs symlink" do
block do
version = `ls /home/robin/test/ -1 | grep '^[0-9.-]+$'`.strip
res = Chef::Resource::Link.new( "/home/robin/test/curr-version-libs", run_context )
res.to ::File.join( "/home/robin/test", version )
res.run_action :create
end
end

编辑:我通过修复正则表达式并调用 strip 来更正答案,然后再按照 Robin 的建议分配给版本。

关于bash - 无法将 bash 命令嵌入 Chef Recipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com