2009-08-04 2 views
1

私はUbuntuの9.04 x64およびを使用していコンソールに戻って、出力をリダイレクトするためにI 15分ごとにパスワードを入力せずに管理タスクを実行するには、常にrootコンソールが必要です。<em>startup.rb</em>がここで私がするように、<em>にsudo bashの</em>呼んで、私はファイルを持っている</p> <p>を、現在の標準出力を見つけるか、またはどのように

このスクリプトはStartup.rb別のスクリプトによって呼び出され、両方のファイルの内容れるが、このようなものです -

ファイル〜/ Startup.rb

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

ファイル〜/スタートアップ.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)がではなく、コンソールであると私に信じさせます。

だから私はなぜこれが起こっているのか知りたいですか?現在の標準出力経路をどのように知ることができますか?または、現在のコンソールに標準出力を戻すにはどうしたらいいですか?

- 感謝

答えて

5

あなたはルビーからシステムコマンドを実行するために、inapproriateメソッドを使用しています。代わりにこれを試してみてください:

#!/usr/bin/ruby 

system 'bash' 

(バッククォート付き)使用している構文は、コマンドの標準出力をキャプチャし、文字列で返します。だからあなたはそれを端末で見ないのです。

ここでは、Rubyからコマンドを実行するさまざまな方法の良い点をご紹介します。6 Ways to Run Shell Commands in Ruby

+0

最近私が ''を発見したときまで私はいつもシステム( "")を使用していたので、イライラしています。 私はできるだけ多くの方法を試みましたが、私はシステム()を試してみましたか? 同じファイル 'startup.rb'でも、最近この行を追加したものを除き、他のすべてのコマンドはsystem()を使って実行されます。 それは気違いです。 –

1

管理タスクをルートとして実行するより簡単な方法に興味がある場合は、他にもいくつか考慮すべき点があります。

$sudo -s 

これはあなたのsudo'd自己(あなたはsudoを経由してシェルを実行できるようにsudoが設定されていると仮定して)としてコマンドを送信することが可能なシェルを与えます。

を行うことができますもう一つは、常にUbuntuのにお勧めか良い形と考えられていないががcreate a root accountにある:

$sudo passwd root 

その後、rootとしてログインし、そのようなものを管理することができます。

私はこれがあなたのルビーについての具体的な質問に答えてくれないことを知っていますが、それが役に立つと願っています。

+0

あなたのご意見ありがとうございます。私は 'sudo-bash'より' sudo -s'を好むでしょう。 –

関連する問題

 関連する問題