1

我正在使用 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)不是控制台。

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

- 谢谢

4

2 回答 2

5

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

#!/usr/bin/ruby

system 'bash'

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

这是对从 Ruby 运行命令的不同方法的一个很好的回顾:6 Ways to Run Shell Commands in Ruby

于 2009-08-04T07:56:31.623 回答
1

如果您只对以 root 身份运行管理任务的更简单方法感兴趣,那么您可能会考虑其他一些事情。

$sudo -s

这将为您提供一个 shell,您可以在其中以 sudo 的身份提交命令(假设已设置 sudo,以便您可以通过 sudo 运行 shell)。

您可以做的另一件事是创建一个 root 帐户,但在 Ubuntu 中并不总是推荐或认为是好的形式:

$sudo passwd root

然后您可以以root身份登录并以这种方式管理事物。

我知道这并不能回答您关于 ruby​​ 的具体问题,但我希望它对您有所帮助。

于 2009-08-04T12:07:46.437 回答