【问题标题】:Chef complaints about invalid Unicode escape厨师抱怨无效的 Unicode 转义
【发布时间】:2016-11-10 01:50:48
【问题描述】:

我想在我的 .bash_profile 中设置以下内容

bash_profile_content = %Q(
export EDITOR=vi
export ENV=#{role}
export PATH=$PATH:/usr/local/bin
export PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w [$ENV]\$ "
)

file '/home/me/.bash_profile' do
    cotent bash_profile_conent
end

厨师抛出此错误:

==> Server-002: [2015-10-07T03:02:23+00:00] ERROR: Exception handlers complete
==> Server-002: Chef Client failed. 0 resources updated in 322.419863736 seconds
==> Server-002: [2015-10-07T03:02:23+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> Server-002: [2015-10-07T03:02:23+00:00] ERROR: /var/chef/cache/cookbooks/servers/recipes/_common_user.rb:67: invalid Unicode escape
==> Server-002: ...ian_chroot:+($debian_chroot)}\u@\h:\w [$ENV]\$ "
==> Server-002: ...   

显然大厨认为@ 字符是用于Unicode 转义的。

我想按原样使用@。我该如何解决这个错误?

【问题讨论】:

    标签: ruby string chef-infra


    【解决方案1】:

    这不是真正的问题,\u 是。例如:

    irb > "\u@"
    SyntaxError: (irb):1: invalid Unicode escape
    "\u@"
       ^
    

    但是:

    irb > "\u0611"
     => "ؑ" 
    

    请记住,%Q(...) 的行为类似于双引号字符串,因此所有常见的转义(例如 Unicode 的 \u)都适用。添加更多反斜杠应该可以解决问题:

    bash_profile_content = %Q(
    export EDITOR=vi
    export ENV=#{role}
    export PATH=$PATH:/usr/local/bin
    export PS1="${debian_chroot:+($debian_chroot)}\\u@\\h:\\w [$ENV]\\$ "
    )
    

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      相关资源
      最近更新 更多