在Ruby中使用带有exec的参数

时间:2018-04-23 13:50:02

标签: ruby bash

当我通过控制台给它一个参数时,我正在尝试执行命令exec,但我不知道如何制作它。

exec('ls -l #{argv[1]}')

Argv [1]是我通过控制台传递的参数,但它没有做任何事情。

2 个答案:

答案 0 :(得分:2)

除非您需要shell执行命令(例如,您重定向到/从文件重定向),否则您可以将参数列表传递给exec

exec 'ls', '-l', ARGV[1]

您是否知道exec 取代正在运行的ruby进程?你想要system吗?

https://ruby-doc.org/core-2.5.0/Process.html#method-c-exec
https://ruby-doc.org/core-2.5.0/Kernel.html#method-i-system

答案 1 :(得分:0)

您的代码中存在几个小问题:

  • 变量未在single-quote strings中插值;这意味着您的脚本总是尝试执行ls -l #{argv[1]}(如此处所写)。
  • 没有名为Object的类argv的变量,常量或方法;有一个global constant named ARGV包含命令行参数。
  • ARGV不包含脚本名称(它存储在单独的属性中),但只包含其位置参数;因此,命令行中的第一个参数存储在索引0,而不是1

综合以上所有内容,您的脚本应为:

exec("ls -l #{ARGV[0]}")