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

Posted

技术标签:

【中文标题】`exec\':字符串包含空字节(ArgumentError)【英文标题】:`exec': string contains null byte (ArgumentError)`exec':字符串包含空字节(ArgumentError) 【发布时间】:2012-08-08 06:00:12 【问题描述】:
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

怎么了?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您的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/, '')

【讨论】:

以上是关于`exec':字符串包含空字节(ArgumentError)的主要内容,如果未能解决你的问题,请参考以下文章

pip install Chatterbot error 安装 chatterbot 错误值:源代码字符串不能包含空字节

java字符串按字节补空问题

如何“声明”一个空字节变量?

使用校验和将字节数组转换为字符串。在 python 中重新迭代时获取额外的空字节

PHP将字符串编译为字节码而不对其进行评估

AppStateClient loadState 检索空字节