Terminal

從 rc.local 執行時鞭尾/對話框輸入錯誤

  • February 10, 2019

我需要在 Debian 啟動時啟動一個包含對話框呼叫的 Bash 腳本。這就是我能夠做到的方式:

  • 取消設置預設root密碼
  • 在initrd ( 1:2345:respawn:/sbin/getty –autologin root tty1 )中將 –autologin選項設置為 tty1
  • 在/etc/rc.local中寫入我的腳本的完整路徑

但是,對話框有一個不尋常的行為:出現該框,但隨後標準輸入似乎溢出標準輸出。當我按下箭頭鍵時,沒有選擇任何按鈕,而是在對話框頂部顯示相應的 ASCII 字元,從預設選擇位置開始:

在對話框中顯示錯誤

請注意,如果我然後按 Enter,則鍵將發送到對話框並按預期選擇相應的選項。該腳本在正常執行時一直在測試工作。

我想shell初始化中缺少一些東西:如果我/bin/bash輸入rc.local,我會收到no job control in this shell消息,並且不能向程序發送信號也不能獲得pid(我得到問號而不是pid top)。

為什麼會出現這種行為,我該如何克服?

似乎從 rc.local 啟動的任何互動式腳本都將與標準輸入有類似的問題。我在超級使用者上找到了一種解決方法:

只需使用啟動您的腳本openvt -s -w /path/to/script.sh

(原帖中的解釋)

控制台未連接到stdin程序whiptail

看起來與在rc.local 中看到的相同問題 read will not echo keystrokes

建議的答案是plymouth quit在嘗試控制台輸入之前添加。

或者,也可以安排普利茅斯本身顯示您的警告;就像是

plymouth pause-progress 
plymouth message --text="Your system will be hosed.  Is that what you want?  What you really, really want? [yn]" 
plymouth watch-keystroke --keys="YyNn " --command="tee /tmp/key_pressed"
case $(cat /tmp/key_pressed) in
    [nN])
        poweroff;          # abort!
        ;;
esac
plymouth message --text="Okay, you asked for this" 
plymouth unpause-progress

警告:我不是普利茅斯專家,也沒有嘗試過上述方法。

引用自:https://unix.stackexchange.com/questions/199582