ruby - 查找当前标准输出或如何将输出重定向回控制台

标签 ruby linux terminal subprocess

我正在使用 Ubuntu 9.04 x64 并且,

我有一个文件 startup.rb,我在其中调用了 sudo bash,这样我就可以始终有一个根控制台来执行管理任务,而无需每 15 分钟输入一次密码左右。

这个脚本被另一个脚本Startup.rb调用,两个文件的内容是这样的-

文件 ~/Startup.rb

#!/usr/bin/ruby
system "gnome-terminal --maximize -x ruby ~/startup.rb"

文件 ~/startup.rb

#!/usr/bin/ruby
`sudo some-repetitive-administrative-task`
....
....
`sudo bash` #Not using `sudo -i`, since that makes `pwd` -> /root

我已将 ~/Startup.rb 文件包含在启动应用程序 列表中。

现在的问题是,在 sudo bash 的终端中,如果我输入一些东西并期望得到一些输出,我什么也得不到。因此,如果我编写 echo hello world,我不会得到任何输出。这让我相信 sudo bash 命令的标准输出 (stdout) 不是控制台。

所以,我想知道为什么会这样?我怎么知道当前的标准输出路径?或者如何将标准输出恢复到我当前的控制台?

-- 谢谢

最佳答案

您正在使用不合适的方法从 Ruby 运行系统命令。试试这个:

#!/usr/bin/ruby

system 'bash'

您使用的语法(带有反引号)捕获命令的标准输出并以字符串形式返回。这就是您在终端上看不到它的原因。

以下是对从 Ruby 运行命令的不同方式的精彩回顾:6 Ways to Run Shell Commands in Ruby .

关于ruby - 查找当前标准输出或如何将输出重定向回控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1226171/

相关文章:

ubuntu - Vim:自上次更改以来没有写入,即使我更改了文件

node.js - 如何在 node.js 的子生成过程中捕获 PowerShell Write-Progress 文本?

ruby-on-rails - Rails 选择值

linux - Docker - 无法使用 docker buildx 构建多平台镜像

ruby - attr_reader、attr_accessor 功能未按预期工作

php - MySQL查看列名大小写

linux - bash 中的垃圾收集

mysql - 需要帮助安装 MySQL

ruby - 使用 RMagick 将缩略图合并为一个大图像

ruby - JSON Gem 不会安装 (Windows)