[英]Print Output to terminal
有人碰巧知道是否可以將腳本的兩個echo
命令打印到同一個終端? 問題是應該打印到終端的腳本是由systemd service
自動執行的。
我已經發現可以打開一個終端並讓它執行一些這樣的命令:
konsole -e command
但是,這將為每個命令打開一個新終端,我希望它們都在同一個終端中執行。
親切的問候百事隆
問題是應該打印到終端的腳本是由 systemd 服務自動執行的。
...並且,因此,沒有關聯的終端:通常,系統服務寫入日志文件,而不是終端。
但是,您可以將回顯重定向到控制台 (/dev/console),它旨在成為唯一“始終存在”的終端。 否則,您可以重定向到您知道的任何終端 - 我的意思是 /dev/ttyS0 或類似的東西,如果您知道自己在做什么(並且您的腳本有權這樣做)。 在圖形環境中可以有任何東西,例如我的系統有大約 4 個文本終端,可以通過按 Ctrl-Alt-F1/2/3 等來查看。
關於如何處理沒有可用於捕獲日志的終端/X session 的情況的問題。 這些可以通過測試 X/終端可用性和回退到日志文件來解決。
每個終端都連接到唯一的偽終端 (PTY),通常是 /dev/pts/0, /dev/pts/1, ..., 。 發送到 PTY 的任何內容都將顯示在終端(konsole、gnome-terminal、xterm、...)上。
您可以使用以下方法構建解決方案
konsole -e '(tty; echo $$) > /tmp/active_tty; while true; do sleep 600; date; done' &
konsole -e '(tty; echo $$) > /tmp/active_tty; while true; do sleep 600; date; done' &
。exec > $(head -1 /tmp/active_tty) 2>&1
或類似如果需要,PID 線可用於檢查終端 PID 是否仍在運行。
我建議使用在空間中使用mktemp
創建的命名 pipe 用於臨時文件。 請注意, mktemp -u
有點不安全。
我在幫助自己如何避免回聲關閉 FIFO 命名管道? - Unix FIFO 的有趣行為與該tail -f
:
our_named_pipe=$(mktemp -u) &&
mkfifo $our_named_pipe && {
tail -f > $our_named_pipe & # is holding pipe open
named_pipe_holder_pid=$!
echo $our_named_pipe # outputting in case you would want to unsafely use it outside
mate-terminal -e \
"bash -c \"cat $our_named_pipe; echo 'Finished, press enter to exit'; read\"" && {
echo "Do things, everythings fine" > $our_named_pipe
sleep 10 > $our_named_pipe
} || echo "You got an error from the terminal emulator"
kill -9 $named_pipe_holder_pid
} || echo "you got an error from mkfifo"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.