Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Satannas 05 Září 2009, 20:59:13
-
Čaute, mám menší prosbu. Celý den se vrtám v jednom skriptíku a už neví jak dál. Bude to nejspíš banalita, ale prostě v knížce a ni na netu sem to nenašel (nebo našel a nevěděl sem to, že to je ono :)). Mám nainstalované Ubuntu 9.10 Alfa4, a chci při náhledu otvírám mezerníkem Eye of gnome. Chtěl bych ho i mezerníkem zavřít, něco jako quicklook. Mám sesmolený tento skript - dál už je asi nad mé schopnosti:
#!/bin/bash
while true; do
if [ `pidof eog` false ] ; then
echo "eog není spuštěný"
sleep 0.2
else
ps -C eog -o pid= > /tmp/.eog.pid
echo "eog běží"
sleep 0.2
read -n 1 tady_chci_mezernik
case $tady_chci_mezernik in
b) (kill -9 `cat /tmp/.eog.pid`);;
esac
fi
sleep 0.1
done;
Nejde mi do hlavy, že pokud to spustim v terminálu, tak ta klávesa B funguje a zavre eog, ale když to spustim bez terminalu, tak klavesa nefunguje. jo, a jeste jestli nevite ja read mezerník?
Díky za každou radu, mě už od rána lítají v hlavě samé $! && || < > a už sem to psal i uplně jinak a furt mi to nejde :) . Jo, ty echa do terminálu mám jen pro svoje věci, abych viděl co to dělá.
-
Tak mě napadlo to udělat trošku jinak. Je to takové ale divné, ještě to musím ví vykoumat. Funguje to tak, že - pokud je spusten eog, tak se přemapují klávesy mezeník a Q, backslash (pomocí xmodmap). Takže se zase mezernikem ten eog zavře, a pak se to nastavi klavesnice nazpatek. Ale pokud je otevreny eog a vedle toho treba pisu neco co pouziva ty klavesy Q, tak to sbírá stisky a pak v eogu to posunuje obrazky (nez dojede pocet stisku a pak to zavre). Jeste to musim promakat :)
-
ještě změna: u toho původního se pořád v cyklu provadi ten xmodmap, tak se to poupravil:
dodatek: změnil sem tu výměnu kláves na Escape.
#!/bin/bash
# keycode jsou z xmodmap.cz; charset "iso-8859-2"
zapnuto() {
xmodmap -e "keycode 65 = Escape Escape"
}
vypnuto()
{
xmodmap -e "keycode 65 = space space"
}
x=0
while true; do
if [ `pidof eog` false ] ; then
if [ $x = 1 ]; then
x=0
vypnuto
sleep 0.2
else
continue
sleep 0.2
fi
else
if [ $x = 0 ]; then
x=1
zapnuto
sleep 0.2
else
x=1
sleep 0.2
fi
fi
sleep 0.2
done;
-
malej offtopic: (skriptem a puvodnim problemem jsem se nijak nezabyval)
while true; do
$blah
sleep $doba
done
^^ se pise radsi takto ;)
while sleep $doba; do
$blah
done
.. a btw u kratsich if-else podminek je lepsi zapis spis takto
if test $podminka || $akce
if test $podminka && $akce
-
.. a btw u kratsich if-else podminek je lepsi zapis spis takto
if test $podminka || $akce
if test $podminka && $akce
ted uz jsou tam, ale ty ify prebytecne, ne?
-
jo, dikec s tim while, (k+), ... ty jasne že si tam muzu dat ty && a ||, jenže já s tím teprv nějak začínám a mě se líp pamatují ty if, else než znaky && atd. :) . Spíš mě dělá starosti ten mezerník. Je to takové kostrbaté, jak budu mít víc času, tak to zkusím nějak líp vykoumat.
-
ted uz jsou tam, ale ty ify prebytecne, ne?
.. uff. jasne .. chybicka se vloudila
-
nebo
[ "$x" = "150" ] && uspech || neuspech
ale to je v podstatě to samý jako příkaz test
-
Ciboha, teď mi to žere v 9.10 50% procesorů. Ani nevím proč, ale ten pidof to není.