Je dois exécuter un script ruby en arrière-plan, mais je veux voir sa sortie en temps réel.Bash - Comment obtenir STDOUT à partir d'un script ruby de fond
j'ai écrit un test simple appelé loop.rb
:
#!/usr/bin/env ruby
(1..4).each do
puts "loop!"
sleep 1
end
dont la sortie est de premier plan:
[email protected]:~/test$ ./loop.rb
loop!
loop!
loop!
loop!
Mais je ne peux pas le voir en arrière-plan:
[email protected]:~/test$ ./loop.rb &
[2] 3935
[email protected]:~/test$
Cependant, je peut voir la sortie ping
en arrière-plan:
[email protected]:~/test$ ping google.com &
[2] 3734
[email protected]:~/test$ PING google.com (64.233.190.113) 56(84) bytes of data.
64 bytes from ce-in-f113.1e100.net (64.233.190.113): icmp_seq=1 ttl=42 time=79.6 ms
64 bytes from ce-in-f113.1e100.net (64.233.190.113): icmp_seq=2 ttl=42 time=79.5 ms
64 bytes from ce-in-f113.1e100.net (64.233.190.113): icmp_seq=3 ttl=42 time=81.7 ms
Alors, deux questions:
Pourquoi puis-je voir la sortie de
ping
et non la sortie deloop.rb
?Comment obtenir la sortie de
loop.rb
en arrière-plan dans Bash?
MISE À JOUR
@TomLord dans le commentaire est juste: il y a une certaine configuration du système impair. Localement, mon ruby
n'est pas un interpréteur de rubis simple installé; C'est un script qui exécute ruby
dans un conteneur Docker. Cela peut donc être un problème Docker. J'ai testé sur une machine avec un interpréteur de rubis simple-installé et cela a fonctionné bien. J'explorerai les problèmes de tamponnage de Docker.
Fonctionne pour moi très bien. – Stefan
Fonctionne bien pour moi aussi. Peut-être avez-vous une configuration système bizarre? (Mais même alors, je ne sais pas pourquoi 'ping' fonctionnerait si ce n'est pas le cas ?!) –
https://superuser.com/questions/972968/why-does-a-background-process-started-in- bash-print-stdout-to-screen # answer-972980 – bjhaid