`exec':string包含空字节(ArgumentError)

Ber*_*era 7 ruby string arguments cmd exec

cmd = "snv co #{rep} --username #{svn_user} --password #{pxs}" 

puts cmd  # this code wotks and prints all vars values normally

exec(cmd)   
Run Code Online (Sandbox Code Playgroud)
xpto.rb:69:in `exec': string contains null byte (ArgumentError)
    from xpto.rb:69
Run Code Online (Sandbox Code Playgroud)
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]
$ gem -v
1.3.7
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?我怎么解决这个问题?

mat*_*att 10

你的cmd字符串在某种程度上有一个空(即零)字节.使用puts不会显示任何空字节,它们只会被排除在输出之外:

1.8.7 :001 > exec "\0"
ArgumentError: string contains null byte
        from (irb):1:in `exec'
        from (irb):1
1.8.7 :002 > puts "n\0n"
nn
 => nil 
Run Code Online (Sandbox Code Playgroud)

你或许应该检查你如何rep,svn_userpxs变量被填充,看看你是否可以跟踪这些空字节的源,但作为权宜之计,您可以使用gsub!删除它们:

cmd.gsub!(/\0/, '')
Run Code Online (Sandbox Code Playgroud)