• Ismertető
  • Hírek
  • Letöltés
  • Súgó
  • Tananyag
  • Közösség
  • Ubuntu Women
ubuntu.hu

Belépés

Mi az az OpenID?
  • Belépés OpenID használatával
  • OpenID belépés megszakítása
  • Felhasználó létrehozása
  • Elfelejtett jelszó

Facebook

Kapcsolat

  • Identi.ca csoport
  • Facebook oldal
  • IRC
  • Közösségi levlista
  • Segítői levlista
  • Magyar Ubuntu Planet
  • További elérhetőségek

Bash szkriptben billentyűzetfigyelés (MEGOLDVA)

2010. szeptember 2. – 18.55 – Wérnyúl
  • Egyéb témák

Sziasztok!

A gondom az, hogy nem tudom megoldani azt, hogy futtatok egy szriptet bash-ben terminálban és el szeretném kerülni, hogy ctrl-c-vel lehessen csak kilépni. (nem akarom a szkriptben éppen végrehajtásra kerülő parancsot megszakítani, csak a szkriptet egy adott ponton)

Tehát olyasmi parancs kellene, mint a - read - , de ne várakozzon mert azzal feltartja a szkript futását.

BIOS-ban DOS alatt volt ilyen lehetőség, hogy csak azt ellenőrizte, hogy a billentyűzet bufferében van-e leütött karakter és he nem volt, akkor tovább lehetett lépni, ha volt, akkor meg le lehetett kérdezni, hogy melyik karakter. Ilyesmi kellene.

Kössz.

‹ Nem akar leállni a gép Bash szkriptben billentyűzetfigyelés (MEGOLDVA) ›
  • A hozzászóláshoz regisztráció és belépés szükséges
NightWolf_ – 2010. szeptember 2. 21.47

Hát ilyet közvetlen nem hiszem hogy tudnál csinálni, amit te szeretnél az engem leginkább az ncurses-re emlékeztet.

Max. olyat tudnék elképzelni, hogy fut a szkript a háttérben, egy másik szkript meg várja a parancsot és gombnyomásra egy jólirányzott kill-el megállítja a háttérfolyamatot.

  • A hozzászóláshoz regisztráció és belépés szükséges

Everybody poe-poe!

Wérnyúl – 2010. szeptember 3. 6.56 – előzmény

A kill-el való megállítás nem jó. Gyakorlatilag ugyanazt eredményezné, mint egy ctrl-c, mivel nem tudom kontrollálni, hogy a szkriptben éppen mi történik a kill kiadása pillanatában.

Még eszembe jutott, hogy nem muszáj bash "belső" parancs legyen amire szükségem van. Lehet ez egy program is, amit meghívok a szkript gyomrában és a visszatérési érték ($?) ellenőrzésével tudnék "elágazni".

  • A hozzászóláshoz regisztráció és belépés szükséges

 

NightWolf_ – 2010. szeptember 3. 10.12 – előzmény

kill-el lehet elég sok jelet küldeni, nem csak SIGTERM-et... Persze ehhez a szkriptnek is ismernie kell (esetleg SIGHUP-pal lehet szórakozni).

  • A hozzászóláshoz regisztráció és belépés szükséges

Everybody poe-poe!

mrton – 2010. szeptember 3. 0.02

valami konkrétabbat tudsz mondani? mert pl: a könyvtár minden pdf fájlját konvertálni akarom html-be. azt szeretném hogy a megszakítási üzenet esetén az utolsó konvertálás még lefusson, nehogy egy 100MB pdf-nek újra neki essen a következő indításkor.
tehát fel kell listáznom a cél állományokat, majd belekergetem egy ismétlődő ciklusba.minden ciklus elején vizsgálok egy feltételt, ami ha teljesül/nem teljesül a ciklus lefut.
ilyen lehet egy fájl megléte, program futása, dg bejegyzés, stb (billentyűzetet puffert még nem kellett vizsgálnom)

  • A hozzászóláshoz regisztráció és belépés szükséges

 

lacirta – 2010. szeptember 3. 8.40

A "trap" a te baratod!


#!/bin/bash
trap "wait; exit 0" SIGINT SIGTERM

./dojob_1 &
wait
./dojob_2 &
wait

Tehat a fenti script azt csinalja, hogy elinditja az 1. feladatot forkkal (dojob_1 &), majd megvarja, hogy az befejezodjon (wait). Ezutan folytatja a tobbi job vegrehajtasaval.

Ha CTRL+C-t nyomsz egy feladat vegrehajtasa kozben, akkor az atdefinialt "trap" direktiva azt csinalja, hogy megvarja az eppen futo feladat befejezeset, majd kilep a scriptbol.

Nekem is kellett mar erre a problemara megoldas, hirtelenjeben ezt talaltam ki, es mukodik is ;)

  • A hozzászóláshoz regisztráció és belépés szükséges

 

Wérnyúl – 2010. szeptember 4. 12.42 – előzmény

Köszönöm, ez működik!

  • A hozzászóláshoz regisztráció és belépés szükséges

 

nagy.zsolt – 2010. szeptember 3. 8.52

-

  • A hozzászóláshoz regisztráció és belépés szükséges

ex glacies

maat – ubuntu.hu szerkesztő – 2010. szeptember 4. 9.59

Nem értem a pontos problémádat. Vagy az emlegetett trap kell neked, vagy valami ilyesmi:

while ! read -t 0.01 -N1 A
do
    sleep 1
    let i++
    echo $i $A
done
echo $A
  • A hozzászóláshoz regisztráció és belépés szükséges

 

Hozzászólás-megjelenítési lehetőségek

A választott hozzászólás-megjelenítési mód a „Beállítás” gombbal rögzíthető.
© 2007–2011. Magyar Ubuntu Közösség.
Az Ubuntu a Canonical bejegyzett védjegye.
Az ubuntu.hu az fsf.hu kiszolgálóin fut.