加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby系统方法参数

发布时间:2020-12-16 22:46:39 所属栏目:百科 来源:网络整理
导读:我很难读 Ruby的系统方法 here的文档.我不确定什么是命令,什么是选项.如果我想执行以下操作,该怎么办? wget -pk -nd -P /public/google www.google.com 出于安全原因,我想使用其中一个不使用shell的版本(我给出的URL中的第二个和第三个表单,而不是第一个)
我很难读 Ruby的系统方法 here的文档.我不确定什么是命令,什么是选项.如果我想执行以下操作,该怎么办?
wget -pk -nd -P /public/google www.google.com

出于安全原因,我想使用其中一个不使用shell的版本(我给出的URL中的第二个和第三个表单,而不是第一个)

解决方法

考虑一下例子:
system("echo *")
system("echo","*")

第一个将字符串’echo *’传递给要解析和执行的shell;这就是为什么system(‘echo *’)产生与shell提示符中的echo *相同的输出:你得到当前目录中的文件列表.相应的参数形式是:

commandline : command line string which is passed to the standard shell

第二个完全绕过壳.它将在PATH中查找echo,然后以字符串’*’作为参数执行它.由于shell扩展了通配符(至少在unixy系统上),*将保持为简单*并且您将看到*作为输出.这里相应的参数形式是:

cmdname,arg1,... : command name and one or more arguments (no shell)

第三种形式:

[cmdname,argv0],... : command name,argv[0] and zero or more arguments (no shell)

如果要执行cmdname但在ps列表中显示不同的名称等,则使用此选项.您可以通过打开两个终端来查看此操作.在其中一个中打开irb并说:

system('sleep','10')

然后快速切换到另一个并查看ps列表.你应该看到那里的睡眠10.但是,如果你把这个给irb:

system(['sleep','pancakes'],'10')

并查看ps列表,你会看到煎饼10.类似的双端技巧会告诉你一个shell -c sleep 10如果你说系统(‘睡10’).

如果您提供Hash作为第一个参数,那么该Hash将用作生成进程的环境变量.如果你提供一个哈希作为最后一个参数,那么哈希被用作选项;如系统文档中所述,有关参数的进一步文档可在Kernel#spawn下获得.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读