Ruby中使用exec命令时如何通过控制台传递参数?
嘿,我一眼就看出问题所在啦!你用了单引号包裹exec的命令字符串,但Ruby里单引号不会解析字符串插值(#{...}语法)——它会把#{argv[1]}当成字面量直接传给ls命令,那ls肯定找不到叫#{argv[1]}的文件,自然就没任何输出了。
修复方案
方案1:改用双引号解析插值
把单引号换成双引号,这样Ruby就会把argv[1]的值替换进去:
exec("ls -l #{argv[1]}")
方案2:更安全的多参数调用(推荐)
如果要避免潜在的shell注入风险(比如传入的参数包含;、|这类特殊字符时,单参数形式会被shell解析执行),推荐使用exec的多参数形式:
exec('ls', '-l', argv[1])
这种方式下,exec会直接调用ls命令,把-l和argv[1]作为独立的命令参数传递,完全绕开shell解析,既安全又可靠。
额外检查点
别忘了确认你运行脚本时确实传入了参数!比如你的脚本叫file_check.rb,运行时要这样传参:
ruby file_check.rb /your/target/path
如果不确定参数是否正确传入,可以先加一行打印验证:
puts "当前传入的目标路径:#{argv[1]}" exec('ls', '-l', argv[1])
内容的提问来源于stack exchange,提问作者M.use
相关产品推荐
相关产品推荐

