尝试对来自厨师的文件执行SED会产生错误,我无法追踪
它从控制台运行没有问题:
sed -i.bak -e "\$aolcRootPW: {SSHA}Z/+CHVP/Vx3bA2m6l0aI6uvIMhJUitpT" /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
然而,从我的食谱:
bash 'UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #3' do
code <<-EOH
sed -i.bak -e "\$aolcRootPW: {SSHA}Z/+CHVP/Vx3bA2m6l0aI6uvIMhJUitpT" /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
EOH
end
我收到以下错误
================================================================================
Error executing action `run` on resource 'bash[UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #3]'
================================================================================
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20151029-7070-y3iz58" ----
STDOUT:
STDERR: sed: -e expression #1, char 8: unexpected `}'
---- End output of "bash" "/tmp/chef-script20151029-7070-y3iz58" ----
Ran "bash" "/tmp/chef-script20151029-7070-y3iz58" returned 1
Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/3rd-open-ldap-server/recipes/default.rb
64: bash 'UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #3' do
65: code <<-EOH
66: sed -i.bak -e "\$aolcRootPW: {SSHA}Z/+CHVP/Vx3bA2m6l0aI6uvIMhJUitpT" /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
67: EOH
68: end
69: bash 'UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #4' do
Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/3rd-open-ldap-server/recipes/default.rb:64:in `from_file'
bash("UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #3") do
action [:run]
retries 0
retry_delay 2
default_guard_interpreter :default
command "UPDATE /etc/openldap/slapd.d/cn\\=config/olcDatabase\\=\\{2\\}bdb.ldif #3"
backup 5
returns 0
code " sed -i.bak -e \"$aolcRootPW: {SSHA}Z/+CHVP/Vx3bA2m6l0aI6uvIMhJUitpT\" /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif\n"
interpreter "bash"
declared_type :bash
cookbook_name "3rd-open-ldap-server"
recipe_name "default"
end
令人困惑的是,我不知道8是什么角色。我怀疑它是某种逃避问题 - 但我不知道在哪里。
更新(以提供洞察它不在的地方):我认为它在sed命令中,而不是文件名,因为这个命令在没有厨师问题的情况下工作:
bash 'UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #2' do
code <<-EOH
sudo sed -i.bak s/dc=my-domain,dc=com/dc=my,dc=lan/g /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
EOH
end
答案 0 :(得分:1)
我怀疑问题是当你在if exist ( C:\Users\%username%\AppData\ABC\
taskkill /f /im File.exe
move C:\Users\%username%\ABC C:\Windows\system\ABC2\
msg * Move
exit
) else if exist ( C:\Windows\system\Cool\
taskkill /f /im Viber.exe
move C:\Windows\system\Cool C:\Users\%username%\AppData\Roaming\ViberPC\
msg * You will active your viber thank you Enjoy it baby. i love you all
exit
) else (
msg * This account (number) does not exist please singup on your smartphone to get acces thank you ... have a nice day
) )
pause
对其进行了一些假的shell var替换的命令包装时,存在一些环境。如果您只使用单引号并放弃$a...
以试图阻止任何此类事情该怎么办?
即:
\
答案 1 :(得分:0)
我需要在sed表达式的开头加倍转义$:
bash 'UPDATE /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif #3' do
code <<-EOH
sed -i.bak -e "\\$aolcRootPW: {SSHA}Z/+CHVP/Vx3bA2m6l0aI6uvIMhJUitpT" /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
EOH
end