2009-08-04 12 views
1

J'utilise Ubuntu 9.04 x64 et,Trouvez la stdout actuelle ou comment rediriger la sortie vers la console

J'ai un fichier startup.rb dans lequel j'appelle bash sudo, de sorte que je Toujours avoir une console racine pour effectuer des tâches administratives sans taper le mot de passe toutes les 15 minutes environ.

Ce script est appelé par un autre script Startup.rb et le contenu des deux fichiers sont comme ça -

Fichier ~/Startup.rb

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

Fichier ~/démarrage .rb

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

J'ai inclus t il ~/Startup.rb fichier dans Startup Applications liste.

Maintenant, le problème est que, dans le terminal de sudo bash, si je tape quelque chose et attend une sortie, je n'en ai pas. Donc, si j'écris echo hello world, je ne reçois aucune sortie. Ce qui m'amène à croire que la sortie standard (stdout) de la commande sudo bash est et non la console. Donc, je veux savoir pourquoi cela se passe-t-il? Comment puis-je connaître le chemin de stdout actuel? Ou comment puis-je restaurer stdout sur ma console actuelle?

- merci

Répondre

5

Vous utilisez une méthode pour exécuter le système inadaptés au commandes de Ruby. Essayez ceci:

#!/usr/bin/ruby 

system 'bash' 

La syntaxe que vous utilisez (avec les accents graves) capture la sortie standard de la commande et il retourne dans une chaîne. C'est pourquoi vous ne le voyez pas sur le terminal.

Voici un bon aperçu des différentes façons d'exécuter des commandes à partir de Ruby: 6 Ways to Run Shell Commands in Ruby.

+0

Eh bien c'est frustrant, parce que j'ai toujours utilisé le système ("") jusqu'à récemment quand j'ai découvert ''. J'ai essayé presque tous les moyens possibles, et ai-je manqué d'essayer system()? Même dans le même fichier 'startup.rb', toutes les autres commandes sont exécutées en utilisant system() sauf celle-ci car j'ai ajouté cette ligne récemment. C'est fou. –

1

Si vous souhaitez uniquement exécuter des tâches administratives en tant que root, vous devez peut-être prendre en compte d'autres éléments.

$sudo -s 

Cela vous donnera un shell dans lequel vous pouvez soumettre des commandes en tant que votre auto sudo'd (en supposant que la configuration sudo a été de sorte que vous pouvez exécuter un shell via la commande sudo).

Une autre chose que vous pouvez faire, mais pas toujours recommandé ou une bonne forme considérée comme Ubuntu est à create a root account:

$sudo passwd root 

alors vous pouvez vous connecter en tant que root et d'administrer les choses de cette façon.

Je sais que cela ne répond pas à votre question spécifique sur ruby, mais j'espère que vous le trouverez utile.

+0

Merci pour votre contribution. Je préférerais 'sudo -s' à' sudo bash' maintenant. –

Questions connexes