相关疑难解决方法(0)

Ruby,exec,system和%x()或Backticks之间的区别

以下Ruby方法有什么区别?

exec,system%x()反引号

我知道它们用于通过Ruby以编程方式执行终端命令,但我想知道为什么有三种不同的方法来执行此操作.

ruby exec

358
推荐指数
3
解决办法
15万
查看次数

ruby系统命令检查退出代码

我在ruby中有一堆系统调用,如下所示,我想同时检查它们的退出代码,以便在该命令失败时我的脚本退出.

system("VBoxManage createvm --name test1")
system("ruby test.rb")
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

system("VBoxManage createvm --name test1", 0) < - 第二个参数检查退出代码并确认系统调用成功,如果没有,则会引发错误或执行某种操作.

这有可能吗?

我已经尝试过这方面的事情,但也没有用.

system("ruby test.rb")
system("echo $?")
Run Code Online (Sandbox Code Playgroud)

要么

`ruby test.rb`
exit_code = `echo $?`
if exit_code != 0
  raise 'Exit code is not zero'
end
Run Code Online (Sandbox Code Playgroud)

ruby command exit-code exit

102
推荐指数
6
解决办法
8万
查看次数

在Ruby中形成卫生shell命令或系统调用

我正在构建一个可以帮助我管理服务器的守护进程.Webmin运行良好,就像打开服务器的shell一样,但我更喜欢能够从我设计的UI控制服务器操作,并向最终用户公开一些功能.

守护程序将从队列中获取操作并执行它们.但是,由于我将接受用户的输入,我想确保他们不被允许在特权shell命令中注入危险的东西.

这是一个例证我问题的片段:

def perform
  system "usermod -p #{@options['shadow']} #{@options['username']}"
end
Run Code Online (Sandbox Code Playgroud)

一个解释更多的要点:https://gist.github.com/773292

如果对这种情况进行典型的输入和消毒输入就足够了,我并不乐观,作为一名设计师,我没有大量与安全相关的经验.我知道这对我来说应该是显而易见的,但事实并非如此!

如何确保将创建和序列化操作的Web应用程序无法将危险文本传递到接收操作的特权进程?

谢谢你的帮助
arb

ruby security shell sanitization system

14
推荐指数
2
解决办法
9432
查看次数

如何在运行时获取ruby system()调用的STDOUT?

类似于在Ruby中获取system()调用的输出,我正在运行系统命令,但在这种情况下,我需要在命令运行时输出STDOUT.

ruby

9
推荐指数
1
解决办法
6751
查看次数

从Ruby中的"system"命令返回输出?

我必须从Ruby脚本执行一个shell命令,但我必须检索输出,以便稍后我可以在脚本中使用它.

这是我的代码:

output = system "heroku create" # => true
Run Code Online (Sandbox Code Playgroud)

但系统命令返回布尔值而不是输出.

简单地说,系统"heroku create"必须输出到我的屏幕(它确实),但也返回输出,以便我可以处理它.

ruby

7
推荐指数
2
解决办法
6635
查看次数

Ruby系统方法参数

我很困惑在这里阅读Ruby system方法的文档.我不确定什么是命令,什么是选项.如果我想执行以下操作,该怎么办?

wget -pk -nd -P /public/google www.google.com
Run Code Online (Sandbox Code Playgroud)

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

ruby

6
推荐指数
1
解决办法
4529
查看次数

我可以从Ruby中获得系统调用的连续输出吗?

在Ruby脚本中使用系统调用时,可以获得该命令的输出,如下所示:

output = `ls`
puts output
Run Code Online (Sandbox Code Playgroud)

这就是这个问题的意义所在.

但有没有办法显示系统调用的连续输出?例如,如果运行此安全复制命令,则通过SSH从服务器获取文件:

scp user@someserver:remoteFile /some/local/folder/
Run Code Online (Sandbox Code Playgroud)

...随着下载的进度显示连续输出.但是这个:

output = `scp user@someserver:remoteFile /some/local/folder/`
puts output
Run Code Online (Sandbox Code Playgroud)

...不捕获该输出.

如何从Ruby脚本中显示下载的持续进度?

ruby bash scripting scp

5
推荐指数
1
解决办法
2075
查看次数

如何在Ruby中获取linux系统信息

如何在Ruby中获取Linux系统的软件/硬件信息(这必须适用于Fedora,Ubuntu等)?

ruby ubuntu fedora system-information

5
推荐指数
2
解决办法
6172
查看次数

如何在Ruby中使用像`less`这样的Unix寻呼机程序?

假设我有一个字符串very_long_string,我想将其内容发送到标准输出.但由于字符串很长,我想用来less在终端上显示文本.我用的时候

`less #{very_long_string}`
Run Code Online (Sandbox Code Playgroud)

我收到File not found错误消息,如果我使用:

`less <<< #{very_long_string}`
Run Code Online (Sandbox Code Playgroud)

我收到unexpected redirection错误消息.

那么,如何less从Ruby内部使用?

ruby unix

5
推荐指数
1
解决办法
1092
查看次数

Ruby仅执行第一行?

我正在编写一个ruby脚本,发现了这种奇怪的行为。

使用 ruby 2.4.2 [x86_64-darwin16]

基本上,我试图回显两个分开的消息,在index.rb文件中我得到了:

exec("echo 'teste'")
exec("echo 'teste2'")
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时 ruby ./index.rb

输出为:

teste
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

这不是输出吗?

testeteste2
Run Code Online (Sandbox Code Playgroud)

ruby shell exec

4
推荐指数
1
解决办法
59
查看次数

bash脚本的%x返回空字符串而不是实际结果

value = %x( #{"svn lock #{@path}/#{@file}"} )
Run Code Online (Sandbox Code Playgroud)

=>

svn: warning: W160035: Path '/README.txt' is already locked by user 'tester' in filesystem 'some_path'
""
Run Code Online (Sandbox Code Playgroud)

返回空字符串,而不是svn:warning消息.我想记录svn警告消息.我究竟做错了什么.

感谢您的帮助.

ruby

2
推荐指数
1
解决办法
80
查看次数

运行一个进程,捕获其输出并退出代码

我知道如何运行外部流程,因为有很多方法可以做到这一点。但是如何将其输出退出代码捕获到变量中呢?这些运行流程的最流行的方式并不像我想要的那样工作:

a = `ls -l` # "a" captures only output
b = system "ls -l " # "b" captures only exit code
Run Code Online (Sandbox Code Playgroud)

ruby

2
推荐指数
1
解决办法
603
查看次数