【发布时间】:2013-02-09 14:08:45
【问题描述】:
我正在尝试将一个 shell 命令嵌入到我的 Chef 食谱中,但是当 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 的符号链接指向 19.26-3。
相反,我最终得到了一个循环符号链接:
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 资源,但得到了相同的结果。
【问题讨论】:
-
如果
grep在命令运行时不匹配任何内容,扩展将被有效删除。您确定该目录当时存在,并且以后不是由另一个厨师食谱创建的吗?你可以ls -l > ls_snapshot然后检查 ls_snapshot 看看当时有哪些文件。
标签: bash chef-infra