作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我写了一本 Chef Recipe ,它配置了一些服务器 .bashrc
文件。
接下来我要做的是 source
文件以加载说明书添加的一些别名。
但无论我尝试什么,源命令都不会发生或不起作用,并且别名丢失。
这是 Recipe 的相关部分:
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. 添加 source 命令作为 bash 'create_command' 代码的第二行。
在该部分添加了第二个 block 。
将命令行编辑为:
command 'source/home/ubuntu/.bashrc' #(没有“bash -c”)
还尝试添加:
script 'source_bashrc' do
interpreter "bash"
code <<-EOH
#!/bin/bash
source /home/ubuntu/.bashrc
EOH
end
我也尝试了一些其他的东西,但无论我做什么,.bashrc
文件都不是源代码。
知道我做错了什么吗?
最佳答案
这不是环境变量的工作方式。当您在 shell 中使用 source
时,该 shell 进程会评估文件并调用 setenv()
一堆(可能还有其他一些东西)。但这只会影响当前进程(同样是 bash
,而不是 chef-client
)和 future 的子进程。子进程不能修改其父进程中的环境变量。这在所有操作系统中都是如此,与 Chef 无关。所以 source
确实有效,但它只适用于那部分脚本,因此它实际上什么都不做。
关于linux - 无法获取 Chef Recipe 以获取 .bashrc,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49562010/
我是一名优秀的程序员,十分优秀!