2012-08-10 108 views
7
cmd = "snv co #{rep} --username #{svn_user} --password #{pxs}" 

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

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

回事請告訴我空字節(引發ArgumentError)?我該如何解決這個問題?`EXEC':字符串包含

回答

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 

你或許應該檢查你的repsvn_userpxs變量是如何被填充,看看你是否可以跟蹤下來這些空字節的來源,但作爲一個快速解決方案,您可以使用gsub!刪除它們:

cmd.gsub!(/\0/, '')