code {background-color:black;color:limegreen;font-weight:bold}
.block {display:block}
Hadd kedveskedjek a Linuxbox olvasóinak egy kis konzolos segédprogrammal!
A parancsterminál felületét alapjában véve egyetlen alkalmazás foglalja el, a shell. Azonban sok megoldás létezik még a grafikus ablakkezelõ elõtt is, amivel a konzolból munkaasztalt varázsolhatunk. Ilyen pl. a GNU screen, vagy a tmux terminál többszörözõ; válthatunk másik vty-re; vagy kicsit hasonlóak a háttérshellt használó programok, ahol a célprogramban végezzük gyakori mũveleteket (pl fájlkezelés mc-vel), minden másra pedig ott a shell.
A legtöbb shellnek van viszont beépített job kezelõje és különben is szeretem a már meglévõ megoldásokat használni! bash-ben így fest a feladatkezelõ:
- indíthatom a parancsokat a háttérben
[geshifilter-code]$ find / -iname afajlaminemtudomholislehet &[/geshifilter-code] - futó programot pillanatmegállíthatok, hogy visszakapjam a promptot
[geshifilter-code]Ctrl-Z[/geshifilter-code] - majd a háttérben továbbfuttatom
[geshifilter-code]$ bg %1[/geshifilter-code] - Milyen taszkjaim is vannak?
[geshifilter-code]$ jobs[/geshifilter-code] - újra elõveszem az elõtérbe
[geshifilter-code]$ fg %1[/geshifilter-code]
Ezzel a pár rövidke builtin paranccsal kezelem a bash beépített feladatkezelõjét. Habár igen rövidek, sõt még így is rövidíteni lehet ([geshifilter-code]fg %+[/geshifilter-code] = [geshifilter-code]fg[/geshifilter-code] = [geshifilter-code]%+[/geshifilter-code], [geshifilter-code]bg %1[/geshifilter-code] = [geshifilter-code]%1&[/geshifilter-code]), jól jönne hozzá egy jobb job kezelõ!
Erre írtam a jobsel «job select» szkriptet.
- Kezdetben csak egy promptban megjelenõ szám volt, ami a háttérben futó job-ok számáról tájékoztatott.
[geshifilter-code class=block]PS1='\[\033[${PS1COLOR_USER}m\]\u\[\033[${PS1COLOR_AT}m\]@\[\033[${PS1COLOR_HOST}m\]\h$(ERRORLEVEL=$?; test \j -eq 0 || echo -n "\[\033[${PS1COLOR_DELIM1}m\]:\[\033[${PS1COLOR_JOBS}m\]\j"; test $ERRORLEVEL -eq 0 || echo -n "\[\033[${PS1COLOR_DELIM1}m\]:\[\033[${PS1COLOR_EXITCODE}m\]$ERRORLEVEL")\[\033[${PS1COLOR_DELIM1}m\]:\[\033[${PS1COLOR_WD}m\]\w\[\033[${PS1COLOR_DELIM2}m\]\$\[\033[00m\] '[/geshifilter-code] - Majd kibõvítettem a PROMPT_COMMAND-omat, ahogyan kecsi javasolta:
[geshifilter-code]PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'jobs -l | _jobs_on_prompt'[/geshifilter-code]
Ahol a _jobs_on_prompt ez a perl egysoros:
[geshifilter-code class=block]<font color="#ffff00"><b>while</b></font>(<>){ (<font color="#00ffff"><b>$j</b></font>,<font color="#00ffff"><b>$p</b></font>)=<font color="#ffff00"><b>/</b></font><font color="#ff6060"><b>(</b></font><font color="#ff6060"><b>\d</b></font><font color="#ff6060"><b>+)</b></font><font color="#ff6060"><b>\]\S</b></font><font color="#ff6060"><b>?</b></font><font color="#ff6060"><b>\s</b></font><font color="#ff6060"><b>+(</b></font><font color="#ff6060"><b>\d</b></font><font color="#ff6060"><b>+)</b></font><font color="#ffff00"><b>/</b></font>; <font color="#ffff00"><b>open</b></font>(<font color="#00ffff"><b>P</b></font>,<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>/proc/</b></font><font color="#00ffff"><b>$p</b></font><font color="#ff40ff"><b>/stat</b></font><font color="#ff40ff"><b>"</b></font>) <font color="#ffff00"><b>and</b></font> (<font color="#00ffff"><b>$c</b></font>,<font color="#00ffff"><b>$s</b></font>)=(<font color="#00ffff"><b><P></b></font>=~<font color="#ffff00"><b>/</b></font><font color="#ff6060"><b>\s\(</b></font><font color="#ff6060"><b>(.+?)</b></font><font color="#ff6060"><b>\)\s</b></font><font color="#ff6060"><b>+(</b></font><font color="#ff6060"><b>\S</b></font><font color="#ff6060"><b>+)</b></font><font color="#ffff00"><b>/</b></font>) <font color="#ffff00"><b>and</b></font> <font color="#00ffff"><b>$o</b></font>.=<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>[geshifilter-questionmarkphp]</b></font><font color="#00ffff"><b>$j</b></font><font color="#ff40ff"><b>&nbsp;</b></font><font color="#00ffff"><b>$c</b></font><font color="#ff40ff"><b>(</b></font><font color="#00ffff"><b>$p</b></font><font color="#ff40ff"><b>) </b></font><font color="#00ffff"><b>$s</b></font><font color="#ff40ff"><b>] </b></font><font color="#ff40ff"><b>&quot;</b></font>} <font color="#ffff00"><b>print</b></font>&nbsp;<font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\033</b></font><font color="#ff40ff"><b>[s</b></font><font color="#ff6060"><b>\033</b></font><font color="#ff40ff"><b>[1;0H</b></font><font color="#ff6060"><b>\033</b></font><font color="#ff40ff"><b>[</b></font><font color="#00ffff"><b>$ENV</b></font><font color="#00ffff"><b>{</b></font><font color="#ff40ff"><b>PS1COLOR_JOBS</b></font><font color="#00ffff"><b>}</b></font><font color="#ff40ff"><b>mjobs: </b></font><font color="#00ffff"><b>$o</b></font><font color="#ff6060"><b>\033</b></font><font color="#ff40ff"><b>[m</b></font><font color="#ff6060"><b>\033</b></font><font color="#ff40ff"><b>[u</b></font><font color="#ff40ff"><b>&quot;</b></font>&nbsp;<font color="#ffff00"><b>if</b></font><font color="#00ffff"><b>$.</b></font>[/geshifilter-code]
A legfelsõ konzolsorba sorolja fel a job-okat.</li>
<li>Most pedig ott áll a dolog, hogy ha már ilyen szép tálcagomb-szerũen csücsülnek fenn a futó programok, tegyük interaktívvá és lehessen õket kiválasztani!
Ehhez már egy egysorosnál hosszabb kódot tudtam gyártani (bár CRLF nélkül is meg lehetne írni ;)
A cikk csatolmányaként tudjátok letölteni!
Kis HaszUtMelléMaFor:
Ha lementetted valahova a $PATH-ba jobsel néven futtathatósági joggal,
<ul>
<li>érdemes rá <b>alias</b>t deklarálni:
[geshifilter-code]alias j='eval $(jobsel "$(jobs -l)" $COLUMNS)'[/geshifilter-code], </li>
<li>vagy <b>keybinding</b>et mondjuk a Meta-j billentyũkombinációhoz:
[geshifilter-code]bind -x '"\204"':"eval \$(jobsel \"\$(jobs -l)\" \$COLUMNS)" bind '"\ej"':"\"\204\""[/geshifilter-code]</li>
</ul>
Innen már boldogulsz, jobbra-balra kiválaszt, enter "megnyit", kérdõjel súgó.
</ol>Köszönöm, jó hekkelést![/geshifilter-questionmarkphp]
- A hozzászóláshoz be kell jelentkezni
Egész ügyes!
- A hozzászóláshoz be kell jelentkezni
köszönjük
Először is köszi szépen az újévi posztot!
Nekem is tetszik a dolog, bár én már hozzászoktam a screen-hez - így azt kis valószínűséggel cserélem le - de kipróbálni kipróbálom ha akad egy kis időm.
Ugyanakkor a háttérben futtatást kevés alakalommal használom. Legtöbbször akkor mikor sokkal később várom az eredményt és nohup-pal futtatva ott is hagyom a dolgot és kilépek és később visszatérve nézem meg az eredményt amit logba irányítok... ugye mindez szervereken...
- A hozzászóláshoz be kell jelentkezni
Egész ügyes!:)