Bash
許多腳本實例可以寫入 tty(並行)嗎?
我最近將我的
upstart
腳本遷移到了systemd
,與此不同的是,我在啟動/停止服務upstart
時看不到任何輸出。為了獲得視覺回饋,我添加了類似tty
echo "Starting $UNIT_NAME" > $MYTTY
其中
MYTTY
是我從tty
命令輸出設置的環境變數。我有 20 多種服務,但不知何故,並非所有消息都出現在我的 tty 上。所以我將行(只是為了檢查)更改為:echo "Starting $UNIT_NAME" | write myuser $MYTTY
有了這個,我看到所有的消息都在顯示!(當然,還有額外的
Message from <user>@<hostname> on <term> at <time> ... EOF
只是為了檢查是否
write
在做一些特別的事情,我檢查了程式碼,bsdutils
我沒有發現任何特別之處,它只是逐個字元地編寫(對特殊字元和 CR、LF 進行了一些處理)出什麼問題了 :
echo "Starting $UNIT_NAME" > $MYTTY
? 我也試過:
echo -e "Starting $UNIT_NAME\r\b" > $MYTTY
等等,但我仍然沒有在螢幕上看到來自所有服務的消息!是不是因為並行
systemd
啟動了所有服務,所以一些寫入 tty 的內容消失了!?–
- 編輯 -
以下回合的方式似乎有效!但我想知道這是否安全或有更好/更簡單的東西
mkfifo /tmp/ttyfifo (cat > $MYTTY < /tmp/ttyfifo &) && echo -e 'Starting $UNIT_NAME\r\n' > /tmp/ttyfifo
理論上是的,因為請求似乎已排隊並且描述符未鎖定,因此最好使用TTYBUS Multiplexer 之類的東西,因為並發寫入文件/fifo 可能會弄亂換行符等。