gpt4 book ai didi

Ruby 系统方法参数

转载 作者:数据小太阳 更新时间:2023-10-29 07:03:33 26 4
gpt4 key购买 nike

我在阅读 Ruby 的 system 方法的文档时感到很困惑 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

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

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

第三种形式:

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

用于当你想执行 cmdname 但它在 ps 列表等中显示为不同名称时使用。您可以通过打开两个终端来查看实际效果。在其中一个中打开 irb 并说:

system('sleep', '10')

然后快速切换到另一个并查看 ps 列表。您应该会在其中看到 sleep 10。但是,如果您将其提供给 irb:

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

并检查 ps 列表,您将看到 pancakes 10。如果您说 system('sleep 10'),类似的双终端技巧将向您显示 shell -c sleep 10

如果您提供哈希作为第一个参数,则该哈希将用作生成进程的环境变量。如果您提供哈希作为最后一个参数,那么该哈希将用作选项;有关参数的更多文档,如 system 文档中所述,可在 Kernel#spawn 下找到.

关于Ruby 系统方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com