我正在編寫一個腳本來自動化工作環境準備。 我需要打開4個終端窗口,排列它們並在其中的每個窗口中執行命令。`xdotool類型` - 隨機重複字符
它的工作原理,但有時我得到討厭失敗 - xdotool type
隨機重複一些字符:
rvm use [email protected] && rails c
~/my_src/ruby_apps/ro > rvm use [email protected] && rails c
ruby-1.99999999999999999999999999999999.3-p194 is not installed.
To install do: 'rvm install ruby-1.99999999999999999999999999999999.3-p194'
~/my_src/ruby_apps/ro >
或在其他窗口:
tail -fn 100 looooooog/thin.0.log
~/my_src/ruby_apps/ro > tail -fn 100 looooooog/thin.0.log
tail: could not open «looooooog/thin.0.log» for reading: No such file or directory
tail: no more files
~/my_src/ruby_apps/ro >
我想這取決於CPU加載,因爲我有非常大的ATOM處理的.bashrc,並且在腳本處理過程中它的負載很高。
我在腳本中使用wait
和sleep
和open_lxterminal_execute_hold()
函數調用的特殊順序先執行簡單的簡單命令。這可以最大限度地減少錯誤,但不會阻止它們。
無論CPU負載如何,你會如何獲得穩定的結果?同樣可以擺脫sleep
也很好。
#!/bin/bash
#
# prepares work environment for rails project
# Opens lxterminal with title if windows with such title
# doesn't exist, executes command and stays open.
# Otherwise does nothing.
#
function open_lxterminal_execute_hold(){
local winid=`xwininfo -name $title 2>/dev/null |grep 'Window id:' |cut -d" " -f4`
if [ -n "$winid" ]; then
echo "Window for title '$title' exists with '$winid'"
else
lxterminal -t $title
sleep 1
wmctrl -i -a "$winid" # bring the window to front, activate
wait
xdotool type "$command"
wait
xdotool key Return # run the command
wait
fi
}
pkill devilspie
cd ~/my_src/ruby_apps/ro # TODO param
title='rails-commandline'; command='ls'; open_lxterminal_execute_hold
title='rails-development.log'; command='tail -fn 100 log/development.log'; open_lxterminal_execute_hold
title='rails-user_case'; command='tail -fn 100 log/thin.0.log'; open_lxterminal_execute_hold
sleep 5
title='rails-console'; command='rvm use [email protected] && rails c'; open_lxterminal_execute_hold
/usr/bin/devilspie -a 2>/dev/null & # arrange windows
UPDATE 如何防止xdotool重複charatcers?
Enzino,謝謝您的解答。但$ SHELL在獲取--rcfile參數時不會執行〜/ .bashrc。這就是爲什麼我認爲它不如ubuntu的那麼有吸引力。 – zuba 2012-07-26 11:10:32
我修改了腳本來執行〜/ .bashrc – 2012-07-26 19:06:54
這種方式看起來更直,乾淨,因爲不需要.bashrc編輯。它也適用於lxterminal。謝謝Enzino,謝謝你的Ubuntu!我投票贊成該解決方案。祝你好運! – zuba 2012-07-27 08:53:44