Найти текущий стандартный вывод ИЛИ Как перенаправить вывод обратно в консоль - PullRequest
1 голос
/ 04 августа 2009

Я использую 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, я не получу никакого вывода. Что приводит меня к мысли, что стандартный вывод (stdout) команды sudo bash - , а не консоли.

Итак, я хочу знать, почему это происходит? Как я могу узнать текущий путь стандартного вывода? Или как я могу восстановить стандартный вывод обратно в мою текущую консоль?

- спасибо

Ответы [ 2 ]

5 голосов
/ 04 августа 2009

Вы используете метод inapproriate для запуска системных команд из Ruby. Попробуйте вместо этого:

#!/usr/bin/ruby

system 'bash'

Используемый вами синтаксис (с обратными галочками) фиксирует стандартный вывод команды и возвращает его в виде строки. Вот почему вы не видите его на терминале.

Вот хороший обзор различных способов запуска команд из Ruby: 6 способов запуска команд оболочки в Ruby .

1 голос
/ 04 августа 2009

Если вас интересует только более простой способ выполнения административных задач от имени пользователя root, возможно, вам следует учитывать и несколько других факторов.

$sudo -s

Это даст вам оболочку, в которой вы можете отправлять команды как от себя sudo (при условии, что sudo настроен так, что вы можете запускать оболочку через sudo).

Еще одна вещь, которую вы можете сделать, хотя не всегда рекомендуется или считается хорошей формой в Ubuntu, это создать учетную запись root :

$sudo passwd root

тогда вы можете войти в систему как root и таким образом администрировать.

Я знаю, что это не отвечает на ваш конкретный вопрос о рубине, но я надеюсь, что вы найдете его полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...