在 rake/ruby 中处理后引号语句中的单引号

Process single quoutes inside back quoute statement in rake/ruby

我需要执行下面的shell命令并读取rake变量中的输出:

`#{security_bin} find-identity -v -p codesigning #{keychain_path} | grep "" | awk -F\" '/"/ {print }' | head -n1`

如您所见,我使用反引号告诉 rake 解释器 "this is a shell command to execute"。问题是它不会工作,因为在调用中使用单引号会破坏解析或其他东西,并且 ruby 不知道条目在哪里结束。

我收到的错误如下:

rake xamarin:create_keychain
Deleted the old one...
About to retrieve identity...
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file

发生流程的函数如下(尽管我仍然怀疑上面提到的行:

def create_temp_keychain(keychain_path, p12path)
    security_bin='/usr/bin/security'

    delete_keychain(keychain_path)

    `/usr/bin/security create-keychain -p tempass #{keychain_path}`
    `#{security_bin} set-keychain-settings -lut 7200 #{keychain_path}`
    `#{security_bin} unlock-keychain -p "tempass" #{keychain_path}`
    `#{security_bin} import #{p12path} -P "" -A -t cert -f pkcs12 -k #{keychain_path}`
    `#{security_bin} list-keychain -d user -s #{keychain_path} "login.keychain"`
    puts "About to retrieve identity..."
    identity_output = `#{security_bin} find-identity -v -p codesigning #{keychain_path} | grep "" | awk -F\" '/"/ {print }' | head -n1`
    puts identity_output
end

在ruby中执行以下命令的正确方法是什么?

双引号应该转义两次:

awk -F\" '...

为了在 ruby.

中基于反引号的 shell 调用中处理 shell 双引号

正确的行是:

`#{security_bin} find-identity -v -p codesigning #{keychain_path} | grep "" | awk -F\" '/"/ {print }' | head -n1`

答案归功于@mudasobwa。