我需要在後臺運行一個紅寶石腳本,但我想實時查看它的輸出。Bash - 如何從背景紅寶石腳本中獲得STDOUT
我寫了一個簡單的測試,稱爲loop.rb
:
#!/usr/bin/env ruby
(1..4).each do
puts "loop!"
sleep 1
end
誰的前景輸出爲:
[email protected]:~/test$ ./loop.rb
loop!
loop!
loop!
loop!
但我不能看到它在後臺:
[email protected]:~/test$ ./loop.rb &
[2] 3935
[email protected]:~/test$
不過我可以在後臺看到ping
的輸出:
[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
於是,兩個問題:
爲什麼我能看到的
ping
輸出,而不是loop.rb
輸出?如何在Bash背景中獲得
loop.rb
的輸出?
UPDATE
@TomLord的評論是正確的:有一些奇怪的系統配置。本地我的ruby
不是一個普通安裝的ruby解釋器;它是一個在Docker容器中運行ruby
的腳本。所以它可能是一個Docker問題。我使用簡單安裝的ruby解釋器在一臺機器上進行了測試,並且工作正常。接下來我將研究Docker緩衝問題。
對我來說工作得很好。 – Stefan
也適合我。也許你有一些奇怪的系統配置? (但即使如此,我不知道爲什麼'ping'將工作,如果這不是?!) –
https://superuser.com/questions/972968/why-does-a-background-process-started-in- bash-print-stdout-to-screen#answer-972980 – bjhaid