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 …

相关内容