代码之家  ›  专栏  ›  技术社区  ›  Vikrant Chaudhary

查找当前stdout或如何将输出重定向回控制台

  •  1
  • Vikrant Chaudhary  · 技术社区  · 16 年前

    我用的是Ubuntu 9.04 x64,

    我有一个文件 启动程序RB 在我呼唤的地方 苏打舞 ,这样我总是有一个根控制台来执行管理任务,而不需要每隔15分钟左右键入密码。

    此脚本由另一个脚本调用 启动程序RB ,两个文件的内容如下-

    文件 ~/Stututu.Rb

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

    文件 ~/Stututu.Rb

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

    我已经包括了 ~/Stututu.Rb 文件在 启动应用程序 名单。

    现在的问题是,在 sudo bash ,如果我输入一些东西并期望一些输出,我就得不到任何结果。所以如果我写 echo hello world ,我没有任何输出。这让我相信 苏打舞 命令是 控制台。

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

    ——谢谢

    2 回复  |  直到 16 年前
        1
  •  5
  •   Ville Laurikari    16 年前

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

    #!/usr/bin/ruby
    
    system 'bash'
    

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

    下面是一个关于运行Ruby命令的不同方法的很好的回顾: 6 Ways to Run Shell Commands in Ruby .

        2
  •  1
  •   Bryan Ward    16 年前

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

    $sudo -s
    

    这将给你一个shell,你可以在其中提交命令作为你的sudo自己(假设sudo已经设置好,这样你就可以通过sudo运行shell)。

    你可以做的另一件事是,尽管在Ubuntu中并不总是推荐或认为是好的形式 create a root account :

    $sudo passwd root
    

    然后您可以作为根用户登录并以这种方式管理事务。

    我知道这并不能回答你关于Ruby的具体问题,但我希望你能发现它有帮助。