Sziasztok !
Szeretném továbbfejleszteni a kernel forgató kis scrip-et. Az első változat jól működik, csak szeretnék kicsit "többet tudóvá" tenni. Egész pontosan a menüvel vagyok elakadva. Ez itt a menü része a script-ből https://pastebin.com/1EWk6Mth
Azt szeretném, ha elvégezte a letöltést akkor térjen vissza a menümbe. Jelenleg a letöltés után kilép a programból. Hogyan tudnék olyan menüt készíteni, ahol egy feladat elvégzése után nem lép ki a programból? Csak akkor ha én szeretném.
- 2918 megtekintés
Hozzászólások
Ha jól értem a problémát, akkor neked egy végtelen ciklus kell.
while true
do
# IDE JÖN A KÓDOD
done
Ha csak a while-ból akarsz kilépni (és nem a szkriptből), akkor az exit 0 helyett a break utasítást használd.
- A hozzászóláshoz be kell jelentkezni
Probáltam de ezzel az a baj, hogy letöltés után újra és újra elkezdi. Ha bedobok a végére a "break" -et akkor csak egyszer hajtja végre a letöltést. De úgyebár ki is lép teljesen.
Azt szeretném elérni, hogy ha végbe ment az utasítás maradjon a menübe és várja a következő utasítást. Csak akkor lépjen ki a programból, ha a "6"-ost megnyomom. Ezért adtam meg a "6"-nak az exit 0 -t
- A hozzászóláshoz be kell jelentkezni
Egy lehetséges megoldás, hogy a menüd legyen a while cikluson belül, az egyes menüpontokhoz tartozó feladatokat meg rakd ki függvényekbe.
Amikor megkapod az inputot, elágazol annak megfelelően, hogy mit kaptál, ha "6-ost" akkor meg exitelsz.
a Te megoldásod is belerakható, így: http://paste2.org/xCeAkO4t
- A hozzászóláshoz be kell jelentkezni
Pontosan erre gondoltam én is az első kommentemben. :-)
- A hozzászóláshoz be kell jelentkezni
Igazad van. Ott rontottam el, hogy lejeb raktam. Most már működik.
Köszönöm a segítséget.
- A hozzászóláshoz be kell jelentkezni
A break-et csak a 6-oshoz gondoltam...
Szerk: ha már menüt bütykölsz, nézz rá a "dialog" parancsra.
- A hozzászóláshoz be kell jelentkezni
Meg bash-ben van olyan is, hogy select.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Mindig tanul az ember.
- A hozzászóláshoz be kell jelentkezni
Hát bizony! Én a figletről nem hallottam, s nézem, van Fedorához is.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A másik elég vad dolog az asciio, de ez berántja a fél Perl univerzumot. Viszont GUI felületen lehet vele Ascii diagramokat készíteni. Kb. 10 éve használta az egyik exkollega, amikor még főleg plain text dokumentációk voltak.
Egyszerűbb diagramokhoz meg ott a Vim alá elérhető DrawIt.
- A hozzászóláshoz be kell jelentkezni
Nem szeretnék plusz programot használni ezért nem dialog-al csinálom a menüt. Ezért is használom a letöltéshez a "curl"-t és nem a kedvencemet a wget-et. Kicsit módosítanom kell a menümet, mert "sub menü" szerűségre van szükségem.
- A hozzászóláshoz be kell jelentkezni
A curl is plusz program...
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
A kernel make menuconfig
-ja nem a dialog-ot használja?
- A hozzászóláshoz be kell jelentkezni
A wgetet ugy tapasztaltam, tobb helyre felteszik alapbol (nekem a curl a kedvencem).
--
A strange game. The only winning move is not to play. How about a nice game of chess? - Wargames
- A hozzászóláshoz be kell jelentkezni
De a legmenőbb az, ha egy környezeti változóból (vagy paraméterből) szedi a letöltőprogram parancsát (és persze egy default értékre beáll, ha nincs megadva).
- A hozzászóláshoz be kell jelentkezni
Vagy megvizsgálja, melyik van telepítve, és azt használja.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ó, ez tényleg menőbb :)
Persze ehhez meg kell egy lista, hogy miket nézzen meg :D
- A hozzászóláshoz be kell jelentkezni
Van egy scriptem, amiben csinálom ezt, de nem teljes értékűen, csak ímmel-ámmal. Néha a Fedora build szerverről frissítek egyes csomagokat egy erre a célra általam írt scripttel, nem várom meg, amíg megjelenik repóban. A letöltést aria2-vel végzem, mert ez tud több szálon tölteni. Ha viszont nincs fenn az aria2, akkor fallback wget-re. A curl-t már nem nézem, nálam a wget mindig telepítve van. Azt sem nézem egy bash scriptben, hogy van-e bash. ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Azt sem nézem egy bash scriptben, hogy van-e bash. ;)
Te ugyan nem nezed, de a szkripted elejen levo
#!/bin/bash
hatasara a kernel biza megnezi :-)
- A hozzászóláshoz be kell jelentkezni
Félreértesz. Persze, hogy a script megmondja, mi legyen az interpreter. De nem dinamikusan mondja meg, hogy ha nincs bash, legyen dash, ash, ksh, csh, vagy akármi. Nem szoktam hordozható scriptet írni. Azért vannak a bash feature-ei, hogy használjam őket, szóval zokszó nélkül írok process helyettesítést, dupla zárójelek között C-stílusban ++-szal inkrementálást, meg egyéb szörnyűségeket. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem szoktam hordozható scriptet írni
Nincsen azzal semmi baj, amig eloirod, hogy neked marpedig bash kell. A problema akkor jelentkezik, ha
#!/bin/sh
-t irsz, es megis bash-specifikus dolgokat hasznalsz.
- A hozzászóláshoz be kell jelentkezni
Azért ennyire lökött nem vagyok! :D Természetesen előírom neki, hogy bash legyen az interpreter.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Akkor nyugodtan alhatsz :-)
(hacsak nem lesz egy ujabb inkompatibilis valtoztatas, lasd peldaul a bash
compat31, compat32, compat40, compat41, compat42
opcioit... ;-)
- A hozzászóláshoz be kell jelentkezni
a kernel biza megnezi
Biztos a kernel?
- A hozzászóláshoz be kell jelentkezni
Azt látom, az execve() az unistd.h-ban van. Akkor talán glibc?
Szerk.: de különben syscall lesz belőle szerintem valóban.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Akkor kernel. Bár szerintem továbbra is igaz, hogy glibc-n keresztül.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Azontúl, hogy a glibc-ben vannak ügyes wrapperek a clone() rendszerhívás fölé (fork, vfork, stb) valamint az execet megvalósító fölé, a libc nem csinál többet. strace-eltél már valaha?
- A hozzászóláshoz be kell jelentkezni
Öhh... Azt hiszem, új dolog tanulása van folyamatban.
Úgy gondoltam, hogy az adott shell (vagy valami), amiben kiadjuk a parancsot, az nézi meg, melyik paranccsal (shellel) töltse be és futtassa a fájlt. Viszont úgy látom, hogy az execve
nézi a shebang-ot a fájl elején.
Na, ha másért nem, legalább ezért a plusz infóért megérte beleszólnom, még ha nem is volt igazam :)
- A hozzászóláshoz be kell jelentkezni
Ha a shell csinálná, bajban volnál, nem lenne transzparens a dolog: nem tudnád bárhonnan ugyanúgy futtatni, mint egy binárist (vagy minden shellben/egyéb programban implementálnod kell). A libc már logikusabb lenne, de abból is van egy rakat, illetve senki se tart vissza, hogy közvetlen syscallt hívj - megint törött rendszert eredményez.
Így kerül shebang line parsolás a kernelbe.
- A hozzászóláshoz be kell jelentkezni
Bevallom, sose gondolkodtam rajta, hogy kin megy keresztül és ki állítja össze a futtatást. Jó pap is holtig tanul :)
- A hozzászóláshoz be kell jelentkezni
dialog-ra +1
- A hozzászóláshoz be kell jelentkezni
Még egy kis segítséget szeretnék kérni. Szeretném ha az egyik echo-val kiírt kimenetem villogna. Azt tudom, hogy így kell megadni "echo -e "\e[5m ...." de valami miatt nem csinálja azt amit szeretnék. Az aláhúzás és a vastagítás működik a színekkel együtt. Egyedül ezt az egy nem.
Másik kérdésem, Szeretnék egy kimenetet nem sima betűvel, hanem vonalakkal kinyíratni. Ha jól tudom van egy program amivel ez lehetséges. Esetleg megtudná mondani valaki melyik ez a program?
- A hozzászóláshoz be kell jelentkezni
Nekem sem villog, csak színeződik. Esetleg villogtasd magad:
while :; do echo -ne '\rflash'; sleep 0.5; echo -ne '\r '; sleep 0.5; done
Mit akarsz kinyíratni? Nagyban akarsz kiírni szöveget például 'x' karakterekkel? Programozd le! :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem akarok semmit "kinyíratni" csak elírtam. Sorry
Kiíratni akart lenni :)
A program amit kerestem azt tényleg a figlet.
Köszönöm a segítséget.
- A hozzászóláshoz be kell jelentkezni
A villogást nem mindent terminál támogatja:
- gnome-terminal-ban nem villog
- xterm-ben igen (de csak akkor ha aktív az ablak)
A vonalas kérdésedre pedig szerintem a figlet parancs/csomag lesz a válasz.
- A hozzászóláshoz be kell jelentkezni
Szeretnék még egy kis segítséget kérni. A következőbe akadtam meg. Kilistáztam az összes kernel verzió-t ami megtalálható a "/usr/src"-ben. A menüben szeretném ezt megjeleníteni úgy; hogy minden verzióhoz tartozón egy szám. Ha megadok neki egy számot azok közül ami megjelenik, szeretném ha csinálna egy linket a "linux" mappához. Szóval dinamikus menü szeretnék.
sub menüvel próbálkoztam ami addig jó, hogy átlép a másik menübe, csak fogalmam sincs hogyan tudom kivitelezni hogy folyamatosan változzon a menübe az adat.
- A hozzászóláshoz be kell jelentkezni
Mi az, hogy folyamatosan változzon a menüben az adat? Rajta állsz a menün, kiírja a létező kernel verziókat, majd alátolsz egy újabb alkönyvtárat, s a terminálon kerüljön a listába úgy, hogy nem nyúltál közben billentyűzethez?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem.
Ha az "/usr/src" könyvtárba bővül vagy kevesebb adat lesz mint jelenleg az alapján változzon meg a menü. PL: Jelenleg így néz ki az az említett könyvtár.
pusztito@Warrior ~ $ ls /usr/src/ | grep "linux-"
linux-4.10.1
linux-4.10.2
linux-4.10.4
linux-4.10.5
pusztito@Warrior ~ $
Menünek így kéne kinéznie a jelenlegi könyvtár adatok alapján.
1 -> linux-4.10.1
2 -> linux-4.10.2
3 -> linux-4.10.4
4 -> linux-4.10.5
Ha mondjuk megnyomom a "2"-t akkor a következőt kéne lefutnia "ln -sf linux-4.10.2 linux" ha mondjuk a "4"-t nyomom meg akkor "ln -sf linux-4.10.5 linux". Ez ilyen formába egyszerű lenne, a csavar viszont az, ha letöltöm mondjuk a jelenlegi legújabb kernelt "linux-4.10.6" akkor úgyebár bővül a lista.
1 -> linux-4.10.1
2 -> linux-4.10.2
3 -> linux-4.10.4
4 -> linux-4.10.5
5 -> linux-4.10.6
Azt szeretném hogy ne kelljen mindig belenyúlni a script-be, hanem automatikusan csinálja meg, úgy hogy ha megnyomom az "5" akkor futtassa le a "ln -sf linux-4.10.6 linux" parancsot. Ha esetleg törlésre kerül az egyik kernel forrás pl "3"-as akkor is módosuljon.
1 -> linux-4.10.1
2 -> linux-4.10.2
3 -> linux-4.10.5
4 -> linux-4.10.6
Így ha a "4"-et nyomom meg akkor linkelje át a linux-4.10.6 -ot.
- A hozzászóláshoz be kell jelentkezni
Tömbbe mentsd le a mappalistádat mindig, amikor belépsz a menübe. (Mondjuk 0-tól kezdi a számozást, de ez van.) Így ha nyomsz egy számot, akkor a tömbből elő tudja húzni, hogy melyik elemet kellene linkelni. A tömböt (index és érték) ki tudod írni egy egyszerű for/while hívással.
- A hozzászóláshoz be kell jelentkezni
Ja, de hát ez könnyű! :) Az fel sem vetődött bennem, hogy a scriptbe drótoznád a listát. Érdemes észrevenni, hogy a bash-nek éppen a helyettesítés az erőssége. Bármit bárhova helyettesíthetsz, így ahol statikusan adnád meg a listát, oda lehet standard output-ot is helyettesíteni. Vagy process substitution. Vagy pipe. Vagy array. Lehetőséged, mint csillag az égen.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Őszintén szólva, fogalmam sincs hogyan álljak neki.
- A hozzászóláshoz be kell jelentkezni
Vázlat, kipróbálás nélkül:
cd /usr/src
i=1
while read; do
[ -d "$REPLY" ] || continue
lista[i]="$REPLY"
echo "$i. $REPLY"
((i++))
done < <(ls -1)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
find /usr/src -type d -maxdepth 1 -name linux-\* | sed 's,^.*linux-,,' | sort -V | cat -n
- A hozzászóláshoz be kell jelentkezni
Akár, bár a sorszámtól eltekintve szinte ez az ls -1, de a célom az volt, hogy egy tömbben ott legyen, ami kell, hogy menüt faraghasson belőle. A echo-t nem is tudom, miért írtam bele. Azért, hogy ki tudja próbálni. Igazából az egész szerves része a menünek, szóval nagyon sok féle megoldás szóba kerülhet.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nagyon tömb sem kell, mert simán szóközökkel elválasztható szövegek ezek (amelyek nem tartalmaznak szóközt). És ha már nincs tömb, akkor már egész hordozható a kód is :)
- A hozzászóláshoz be kell jelentkezni
Csak kérdezem, a tömb miben zárja ki a hordozhatóságot?
--------------
„If there were no hell, we would be like the animals. No hell, no dignity.”
- A hozzászóláshoz be kell jelentkezni
Nem minden shell támogatja a tömböket, pl. (ha linux-vonalon maradunk) a dash sem. Itt ilyesmit írnak:
Array variables are not portable. With some care about suitable separators they can typically be replaced with a series of ${foo#bar} expansions and the like without noticeably affecting performance.
illetve
Here's another example that may be needed when dealing with these bashisms on arrays.
- A hozzászóláshoz be kell jelentkezni
Hmm… Nem tudtam. Köszi :)
--------------
„If there were no hell, we would be like the animals. No hell, no dignity.”
- A hozzászóláshoz be kell jelentkezni
Szívesen máskor is :)
- A hozzászóláshoz be kell jelentkezni
Visszagondolva a LEDE router-emre írt egyik scriptemre, nekem úgy tűnt, hogy ash-ban nincsenek tömbök. Van viszont eval, így lehet ilyet csinálni:
eval echo \$tomb_$index
Az elemek pedig tomb_0, tomb_1, stb.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ne találd fel újra a Gentoo-t, inkább használd! (eselect kernel)
------------------------
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
Ebbe van valami. Lehet, inkább ki kéne hagyni az átlinkelést. Inkább maradni az eredeti forrásnál.
- A hozzászóláshoz be kell jelentkezni
Félreértesz. A Gentoo 'eselect' nevű eszközének 'kernel' nevű modulja éppen ezt valósítja meg, amit fentebb vázoltál.
------------------------
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
Igen tudom. Nemrég visszatértem LFS linuxról funtoo-ra. Régi nagy kedvencemhez. Azért nem használom fel az "eselect"-t mert szeretnék ha distro független lenne. Talán késgöbiekbe visszatérek az LFS-hez.
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Egy kis tanácsot szeretnék kérni. Programom leellenőrzi, hogy csatolva van e a "/boot" partíció és ha nem akkor csatolja. Ezzel nincs is gond. Arra lennék kíváncsi, melyik megoldást tartjátok jobbnak. Ha a partíciót az "fstab"-ból olvasom ki vagy a "mount" parancsot szerkesztem meg. Nem tudom miért, de eddig mindkettőt használtam és csak most tűnt fel. :D Gondoltam, egységessé teszem.
- A hozzászóláshoz be kell jelentkezni
Kérdés, hogy mi a célod vele: csak most akarod csatolni, vagy mától kezdve mindig...
- A hozzászóláshoz be kell jelentkezni
Mától kezdve mindig, amikor a programom elindul, ill mindig amikor fut. Eddig úgy vettem észre, hogy mindkét variáció működő képes (Eddig nem vettem észre problémát). Szerintetek melyiket volna célszerűbb használni?
- A hozzászóláshoz be kell jelentkezni
Az fstab-ban épp a kívánt paraméterekkel van, tehát arra hivatkoznék. Persze, ha ott esetleg ro, az szívás. Viszont, ha nincs felcsatolva a /boot, akkor honnan tudod, hogy melyik az, hacsak épp nem az fstab-ból?
Egyébként én a gép elindulását követően nem szoktam lecsatolni a /boot-ot.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Jogos. Ha nincs felcsatolva, akkor csak az fstab-ból tudhatom meg a paramétereket. Igazad van. Ha mondjuk, a "/" könyvtárra is kíváncsi vagyok, akkor arra használhatom a "mount" parancsot.
Grub-al kapcsolatba is volna egy kérdésem. A grub konfig létrehozására a következő parancsot használom. "grub-mkconfig -o /boot/grub/grub.cfg" Arra lennénék kíváncsi, hogy a "grub-install" parancsot is mindig le kell futtatni minden "grub-mkconfig" futtatás után? Ha igen, milyen sorrendbe?
- A hozzászóláshoz be kell jelentkezni
Nem kell lefuttatni, hiszen az MBR-ben és az első partíció előtt már ott a Grub. Hivatalosan ugyan beleírják commentbe, hogy ne szerkezd a grub.cfg-t, de nyugodtan hozzányúlhatsz. Két ok miatt van ott, hogy do not edit:
1) Ha elszúrod, nem boot-ol a gép, csak egy live Linuxról tudod helyrehozni, ami nyűgös
2) A változtatás nem marad meg abban az értelemben, hogy a grub-mkconfig felülírja, hiszen épp ő állítja elő a grub.cfg-t. Viszont ez csak akkor probléma, ha használod a grub-mkconfig parancsot.
Én nem szoktam, mert Fedora - ezt a disztribúciót használom - kernel frissítéskor a grub.cfg-t editálja, a kernel paramétereket, az fs uuid-eket átveszi az aktuálisan futó kernel bejegyzéséből. Mivel sohasem használom a grub-mkconfig parancsot, továbbá biztos vagyok magamban, nekem kényelmesebb közvetlenül a grub.cfg szerkesztése.
Ha annyira elbénázok valamit, hogy kell az autodetect, akkor inkább úgy használom a grub-mkconfig parancsot, hogy egy ideiglenes file-t generáltatok vele, például grub.cfg.temp néven, s megnézem, mit alakított, s az értelmes részeket manuálisan szerkesztem a grub.cfg-be.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
mount /boot oszt kész.
Ha nincs mountolva, felmountolja, amúgy marad békén.
Utána mount /boot -o remount,és
De ezek teljesen jól dokumentált alap dolgok. Te csinálod, vagy mi? (A szokásos kérdésem.)
- A hozzászóláshoz be kell jelentkezni
+1
Mi az, hogy és? Nem rw akart az lenni? ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Autocorrect, yep.
- A hozzászóláshoz be kell jelentkezni
Zsír! :DD
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
"De ezek teljesen jól dokumentált alap dolgok. Te csinálod, vagy mi? "
Ezt a kérdésed, nem igazán értem. Egy kernel build script-et írok. Ezt a "mount /boot" módszert nem ismertem bevallom őszintén. Mindig "mount -t ext2 /dev/xxx /boot" -ot használtam. Néha kihagyom a filerendszer típusát az igaz.
- A hozzászóláshoz be kell jelentkezni
Ez a baj. Azt se tudod, mit csinál.
Olvastad már a man pageét, vagy valami?
- A hozzászóláshoz be kell jelentkezni
Ha nem adod meg, hogy mit hova, hanem csak a mit, vagy csak a hovát, s az szerepel az fstab-ban, akkor onnan szedi a hiányzó infót. Aztán van olyan is, hogy
mount -a
Ami végiggyalogol az egész fstab-on, s ami nincs felcsatolva, azt felcsatolja.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Meggyőztetek. Egyszerűen "mount /boot"-ot használom. A script-et is módosítottam.
- A hozzászóláshoz be kell jelentkezni
Nem kötözködöm, hanem konstruktív jelleggel jegyzem meg, hogy felesleges olyasvalamit automatizálni, amit nem ismersz és emiatt nem tudsz manuálisan érdemben, szabályosan, jól és dokumentált formában végigcsinálni. Nem sok esélyed van a sikerre, és az eredmény csak szerinted lesz használható. Ne kapkodj, ne csapongj, hanem gondolkozz és tanulj! Lassíts! Ne feltaláló akarj lenni, mielőtt technikustanonc lettél volna egyáltalán...!
------------------------
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Leteszteltem, a manuális és az automatikus kernel forgatást is. Nagyon jól működik. Már csak a grub configot kellene megoldani rendesen. Sajnos, a "grub-mkconfig -o /boot/grub/grub.cfg" nem a legjobb. Legalábbis, megcsinálja a configot de valami miatt csinál egy submenu-t és onnét lehet indítani a kerneleket. Müködik így is, csak mindig boot-nál át kell lépni. Megfordult a fejembe, hogy esetleg a funtoo boot updateja zavar be neki. Mivel lfs linux-ot mikor használtam, mindig így frissítettem a grub-ot. Előfordulhat, hogy tényleg ez zavar be neki?
- A hozzászóláshoz be kell jelentkezni
Írtam róla fentebb. Teljesen mindegy, hogyan csinálod a grub.cfg-t, csak jó legyen. Az egy text file, egy script. A másik kritérium, hogy a disztribúció egy másik valamilye buzgalmában ne írja felül azt, amit csináltál.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
whiptail?
-------------------------
Dropbox refer - mert kell a hely: https://db.tt/V3RtXWLl
neut @ présház
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Szeretnék egy flash-t belerakni, a kernel készítő scriptembe. Az egyik echo kimenetem szeretném, ha váltaná a színét, úgy hogy a program továbbra is folytatódjon. Ugyebár a "while" ciklussal meg tudom csinálni a flash-t, de a program többi elemét nem mutatja. Hogyan tudom azt megcsinálni, ne csak a flash működjön, hanem a program többi része is?
- A hozzászóláshoz be kell jelentkezni
Úgy, hogy a villogtató programot másik processben futtatod:
parancs &
Lehet függvény is, de van subshell is, az meg a gömbölyű zárójel.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Írtam egy hevenyészett vázlatot a villogtatásra, működik, de így éjszaka már nem írom bele, hogy a menüt kiírja, az csak az első 'l' betű lenyomása után törtémik majd meg. A lefelé nyíl az 'l', a felfelé nyíl a 'p', kilépés pedig a 'q'. Pirosan villog az aktuális menüpont, amúgy meg az égvilágon semmire sem jó az egész. :) Az 'indeksz' nevű változóért bocsánat, de a HUP fórummotorja elnyeli ezt a szót normálisan leírva szögletes zárójelek között, ezért ez az idétlen név.
#!/bin/bash
menu=('alma' 'körte' 'szilva' 'kutya' 'hernyó' 'nyúl')
FLASH_TIME=0.5
posx=5
norm='\e[m'
lred='\e[31;1m'
blink() {
while :; do
echo -ne "\e[s$lred$1$norm"
sleep "$2"
echo -ne "\e[u$1"
sleep "$2"
echo -ne '\e[u'
done
}
pid=0
spaces=' '
indeksz=0
while read -srN 1; do
old=$indeksz
[ "$REPLY" = 'p' ] && ((indeksz > 0 && indeksz--))
[ "$REPLY" = 'l' ] && ((indeksz < ${#menu[@]}-1 && indeksz++))
[ $indeksz -eq $old ] && [ "$REPLY" != 'q' ] && continue
if [ $pid -gt 1 ]; then
kill $pid
wait $pid &>/dev/null
[ $old -gt 0 ] && echo -ne "\e[${old}A"
echo -ne '\r'
fi
for ((i=0; i<${#menu[@]}; i++)); do
echo "${spaces:0:posx}${menu[i]}"
done
[ "$REPLY" = 'q' ] && break
((i=${#menu[@]}-indeksz))
echo -ne "\e[${i}A\r"
echo -n "${spaces:0:posx}"
blink "${menu[indeksz]}" $FLASH_TIME &
pid=$!
done
exit 0
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Köszönöm. Tetszik az ötlet. Lehet, később átalakítom a menümet. Most jelenleg, az egyik flesh megjelenésével kínlódok. Ebbe kérnék egy kis segítséget. Van egy "Flash" nevű fügvényem ahol az egyik változom értékét kellene megjeleníteni és villogtatni.
Fügvényem:
function Flash() {
while :
do
echo -ne '\r $SOURCEVER '
sleep 0.5
echo -ne '\r '
sleep 0.5
done
}
Azt szeretném ha itt jelene meg a Flash
echo -e "$Y Rendszer kernel verzió: $N $R linux-$SYSVER $N"
if [ "$linux-$SYSVER" != "$SOURCEVER" ]; then
echo -e "$Y Legújabb kernel verzió: $N"
Flash &
else
echo -e "$Y Legújabb elérhető verzió: $N $G Jelenleg nincs újabb verzió. :)$N"
fi
Hogyan tudnám elérni, azt hogy csak a "Legújabb elérhető verzió" után jelenjen meg a "Flash" ? Úgy hogy a a program többi részét is megjelenítse?
- A hozzászóláshoz be kell jelentkezni
Nem fogom megoldani helyetted egyrészt azért, mert abból nem tanulsz, másrészt azért, mert az nekem is idő, viszont segítek olyan dolgokban, amelyeket egyből látok.
A function kulcsszót nem muszáj kiírni, bár lehet. Ezen felül szerencsésebb lehet, ha a függvénynek paramétert adsz át, s nem globális változót íratsz ki. Figyelj arra, hogy a háttérben futtatott függvény önálló process-ben fut, teljesen izolált memóriaterületen, egy másik shell futtatja. Becsapós, mert ebben a scriptben írtad le, de egy időben csak így tud egyszerre végrehajtódni a két kód. Ez azért is érdekes lehet, mert például a függvényed változóira semmilyen rálátása nem lesz az eredeti shellnek. A függvényed paraméterei $1, $2, $3, stb., épp úgy, ahogyan a shell-nek is át tudsz adni paramétereket.
Az aposztrof teljes elzárás a shell elől, tehát azon belül nem történik helyettesítés. Ha azt szeretnéd, hogy a változód helyettesítésre kerüljön, ha úgy tetszik, „kifejtődjön”, használj idézőjelet aposztrof helyett.
Miután háttérben indítottál egy függvényt, a $! segítségével kérdezd le annak process azonosítóját, ellenkező esetben nem találod meg többé, az mindig ott fog futkorászni a háttérben. Értelemszerűen előbb-utóbb ki kell majd nyírnot. Erre jó a kill parancs, amellyel például SIGTERM-et küldhetsz neki. Vigyázz, a kill csak elküldi a signal-t, de nem várja meg, amíg elpusztul a process, így a wait paranccsal tudod megvárni, amíg valóban meg is hal.
Figyelj arra, hogy noha független folyamatokat futtatsz párhuzamosan, ezek ugyanarra a terminálra írnak. Ha az egyik folyamat a kurzorpozíciót megváltoztatta, vagy ANSI szekvenciával a színeket módosította, akkor a másik folyamat erről nem fog tudni, amit kiír, az a megváltoztatott pozícióra és attribútummal történik majd, hiszen ezek a terminálnak szólnak, nem a process-ek állapotváltozói. Ha alaposabban megfigyeled, a programomban előbb megölöm a villogtató folyamatot, meg is várom, míg az elpusztul, s csak azt követően módosítom a kurzorpozíciót. Mivel nem tudom, hogy épp piros vagy fehér a felirat, amikor kinyírtam a blink() függvényt, az egész menüt kiírom normál színnel, elérve azt, hogy ne maradjon ott piros szöveg.
Az is fontos, hogy még ugyanaz az echo írja az attribútumokat normál színre, amelyik pirosra írta. Ha nem így lenne, ebből a szempontból nem lenne atomikus a függvény, előfordulhatna, hogy a kinyírásakor éppen piros marad a terminálon a beállítás. Azt is vedd észre, hogy van ott kurzorpozíció mentés és annak visszatöltése is. A posx az balról behúzás, hogy ne feltétlenül bal szélen kezdődjön a menü.
A wait sokat szövegel, összeszemetelné a terminált, így mind az stdout, mind az stderr megy a null device-ra. A felfelé kurzor mozgatás tapasztalatom szerint 0 értékkel is 1-et lép fel, hogy dögöljön meg :), ezért vizsgálom a változót, s csak nem 0 esetén mozgatom felfelé a kurzort a változó értékével. A másik hasonló esetben ez a vizsgálat nem kell, mert a változó sohasem lehet ott 0, mivel a kurzor a menü alatti sorban van, tehát legalább 1-gyel feljebb kell lépni.
Tegyük hozzá, egy kernel fordító script kiválasztó menüjébe teljesen felesleges a villogtatás, viszont rengeteget tanulsz, ha megcsinálod, mert ez látszólag egyszerű, valójában rengeteg buktatója van, amelyekről részben most beszéltem is.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
"Tegyük hozzá, egy kernel fordító script kiválasztó menüjébe teljesen felesleges a villogtatás,"
Igazad van. Ez csak "dizájn". Csak Jól mutatna, ha az egyik echo kimenet után villogva mutatná az egyik változó kimenetet. Már sikerült a függvénybe behelyettesíteni a változót úgy, hogy mutatja is. Már csak azt kell megoldanom, hogy rendesen a helyére kerüljön.
- A hozzászóláshoz be kell jelentkezni
Láttad a mintámat, onnan tudsz puskázni. Meg némi magyarázatot is írtam hozzá. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Egy picike kis segítséget szeretnék kérni. Van egy echo kimenet ahol két adatott, jelenít meg annak a függvényébe, hogy a két adat megegyezi e. Ezt egy egyszerű if -el el lehet dönteni. Valami miatt mégse akarja megfelelően végrehajtani.
echo -e "$Y Rendszer kernel verzió: $N $R linux-$SYSVER $N"
if [ "$linux-$SYSVER" != "$SOURCEVER" ]; then
echo -en "$Y Legújabb kernel verzió: $N $G $SOURCEVER $N"
else
echo -e "$Y Legújabb elérhető verzió: $N $G Jelenleg nincs újabb verzió. :)$N"
fi
Valamiért, ha a két adat megegyezik akkor is a (echo -en "$Y Legújabb kernel verzió: $N $G $SOURCEVER $N") hajtódik végbe. Lemerem fogadni valami egyszerű a megoldás csak nem szúrja ki a szemem :)
- A hozzászóláshoz be kell jelentkezni
Nem egyezik az meg, csak szeretnéd hinni. Lehet, hogy az egyikben van a végén egy felesleges szóköz, amit nem látsz, vagy valami hasonló. Úgy szoktam, hogy elé, mögé aposztrofot írok, s akkor látszik a debug:
echo -e "'$linux-$SYSVER'\t'$SOURCEVER'"
Ezt az if előtti sorba írd, s akkor látod majd a disznóságot.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Megvan a gond :D Egy plusz "$" miatt volt.
- A hozzászóláshoz be kell jelentkezni