2012-08-10 12 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)

उत्तर

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 

आप शायद की जांच होनी चाहिए कि कैसे अपने rep, svn_user और pxs चर यदि आप ट्रैक कर सकते हैं देखने के लिए आबादी किया जा रहा है इन नल बाइट्स के स्रोत के नीचे, लेकिन एक त्वरित फिक्स के रूप में आप उन्हें हटाने के लिए gsub! का उपयोग कर सकते हैं:

cmd.gsub!(/\0/, '') 
संबंधित मुद्दे