Bash 腳本在執行操作時不確定

Bash 腳本在執行操作時不確定

我有一個 bash 腳本,我在系統啟動(Ubuntu 10.04)“啟動應用程式”時調用它。

腳本:

#!/bin/sh

APP1='/home/ipc-display/development/projects/display-mgmt'
LOG='/home/ipc-display/development/projects/bootLog.txt'

cd $APP1/target/scala-2.10
java -jar display-mgmt-1.0.jar &

# Auto Hide Mouse Pointer
/usr/bin/unclutter &

#Start chrome
sleep 5s
/usr/bin/google-chrome --incognito --app=http://192.168.0.100:9000/welcome &

#Bring Chrome to focus
sleep 5s
/usr/bin/wmctrl -a "http://" && 

#FullScreen Chrome
sleep 3s &&
/usr/bin/xdotool key F11

bash

撇開我可怕的腳本能力不談,有什麼想法可以解釋為什麼 Chrome 並不總是像我期望的那樣確定性地進入全螢幕嗎?

我搔頭不明白為什麼它有時會全螢幕顯示,但並非總是如此。順便說一句,對此腳本的任何增強都將不勝感激。

謝謝。

答案1

似乎是時間問題導致了這種情況 - 也許在聚焦 Chrome 和按下 之間的三秒鐘內有一些東西被前景化F11

我不確定如何工作,但您在該行末尾wmctrl使用似乎有點不協調。&&這不會使進程後台運行,而是指示 shellsleep 3s僅在命令成功時運行下一個命令 ( )。

但是,您可以簡單地--kiosk在啟動時全螢幕顯示 Chrome,並跳過腳本的其餘部分。

答案2

您的腳本看起來不錯,但我認為您不需要sleep在其中插入這麼多呼叫。人們通常用來sleep解決由於無法確定某些非同步任務的完成而導致的競爭條件。例如,執行 awget來啟動遠端腳本執行並等待足夠的時間讓伺服器產生可以執行後續操作的文件GET,您可能會用來sleep繞過不知道該文件何時準備就緒的情況。雖然有點笨拙,但它可以滿足大多數人的需要。

不過,你sleep在這裡並沒有什麼意義。例如,我認為如果chrome先啟動,unclutter有機會做它的事情,不會造成太大傷害。也沒有等待完成的非同步任務wmctl(好吧,涉及 IPC,但我認為wmctl在通訊完成之前不會返回),因此插入三秒sleep似乎太多。不過,我認為任何數量sleep都是不必要的。

答案3

我不知道這是否是您的問題,但是更改活動視窗是不可靠的:其他東西可能會在您睡眠期間更改活動視窗。相反,您應該告訴xdotool將密鑰發送到所需的視窗。

xdotool search --class Google-chrome -- key F11

正如 l0b0 所說,你可能應該改用google-chrome --kiosk …

相關內容