虽然1.8.7的构建我似乎有一个向后移植的Shellwords::shellescape版本,但我知道该方法是1.9的一个特性,在1.8的早期版本中绝对不支持.有谁知道我在哪里可以找到(以Gem形式或仅作为片段)针对Ruby转义的Bourne-shell命令的强大独立实现? 最佳答案 您也可以从shellwords.rb中复制您想要的内容。在Ruby的颠覆存储库的主干中(即GPLv2'd):defshellescape(str)#Anemptyargumentwillbeskipped,soreturnemptyquotes.ret
我想要一个Ruby方法或一个正则表达式,它们可以让我将一串命令行参数拆分成一个类似ARGV的数组。我要问的是类似于thisquestion,但在Ruby中。我正在为使用Trollop处理命令行输入的Ruby程序编写单元测试(尽管这个问题对于任何其他选项解析器都是相同的)。我要测试的方法如下所示:defparse_args(args)Trollop::options(args)do#...parseoptionsbasedonflagsendend在我的程序中,我调用了parse_args(ARGV)。在我的测试中,我认为我可以传入一个按空格拆分的字符串,但这不是ARGV的行为。比较以下
我正在尝试启动mplayer。我的文件名包含空格,这些应该被转义。这是我正在使用的代码:@player_pid=forkdoexec"/usr/bin/mplayer#{song.file}"end其中#{song.file}包含类似"/home/example/music/01-asong.mp3"的路径。我怎样才能正确地转义这个变量(以及标题可能包含的其他可能的奇怪字符),以便终端接受我的命令? 最佳答案 Shellwords应该适合你:)exec"/usr/bin/mplayer%s"%Shellwords.escape(so
好吧,这让我发疯:`ls#{"/media/music/MilesDavis"}`由于“Miles”和“Davis”之间的空格而失败假设我编写了一个ruby脚本,用户将文件路径作为参数传递。我如何转义它并提供给shell-out命令。是的,是的,我知道,应该避免掏空。但这是一个人为的例子,我仍然需要这个。我会做system("ls",ARGV[0]),但它不会将ls的标准输出输出作为字符串返回,这正是反引号擅长的地方。如何转义你在shellout中插入的任何内容? 最佳答案 使用require'shellwords'和Shell
这个问题在这里已经有了答案:IsthereanequivalenttotheRubyShellwordsmodulefortheWindowsshell?(3个答案)关闭8年前。通常在接受用户输入时,我会做类似system("echo#{Shellwords.shellescape(data)}")的事情,但在Windows上我总是得到:[2]pry(main)>system("echo#{Shellwords.shellescape(var1)}")Hello\\'\world=>true有什么方法可以让我正确地转义Windows吗?
我一直在尝试使用包含来自Windows环境变量的多字节字符的参数调用exec,但尚未找到可行的解决方案。到目前为止,这是我能够调试的内容。为简单起见,假设我有一个名为“Seán”的目录,我试图将其用作exec的参数。如果我只是打电话exec'script',"Se\u00E1n".encode("IBM437")执行的脚本无法找到该文件,因为arg以丢失重音字符的方式进行了调整。如果我执行以下操作,它会起作用,但这是不好的做法,因为arg应该在进入shell之前进行转义。exec"script#{"Se\u00E1n".encode("IBM437")}"所以我的想法是我会使用shel
我需要从Ruby中的数组构造Windowsshell命令行。如果我使用Bash,我可以使用标准的Shellwords模块。Windowsshell是否有等效于Shellwords的工具,它可以安全地将数组转换为命令行字符串? 最佳答案 不幸的是,在我看来实际上没有与Shellwords类似的Windows。 关于ruby-是否有与Windowsshell的RubyShellwords模块等效的模块?,我们在StackOverflow上找到一个类似的问题: ht