ulv*_*ver 26 ruby bash shell scripting
好的,这让我抓狂:
`ls #{"/media/music/Miles Davis"}`
Run Code Online (Sandbox Code Playgroud)
由于"Miles"和"Davis"之间的空间而失败
假设我写了一个ruby脚本,用户将文件路径作为参数传递.如何将其转义并输入shell-out命令.是的,是的,我知道,应该避免炮击.但这是一个人为的例子,我仍然需要这个.
我会这样做system("ls", ARGV[0])
,但它不会将ls的stdout输出作为字符串返回,这是反引号做得好的.
如何逃避在shellout中插入的内容?
Cas*_*per 51
使用require 'shellwords'
和Shellwords.escape
,将为您解决这类问题:
http://apidock.com/ruby/Shellwords/shellescape
尽可能远离构建shell字符串,它是任意代码执行的精确向量.
在这种情况下,您可以使用popen
,它会为您进行转义:
IO.popen(['printf', 'a b']) do |f|
var = f.read
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6527 次 |
最近记录: |