Portál AbcLinuxu, 14. května 2025 01:31
Jako kam ?Jak jsem psal, do něčeho jako je less. když spustim neco | less tak se vystup vypisuje v něčem (fakt nevím co to je) ale po skončení zmáčknu klávesu q a vyskočím z toho a v příkazové řádce není ani památky o tom, že jsem něco spouštěl. Jenže less nejde použít na příkazy, ktere vyžadují od uživatele nějakou volbu třeba (y/n), proto hledám něco co se po skončení hezky uklidí a CL zůstane přesně ve stavu jako před spuštěním příkazu nebo funkce. Dík
less
je ten program, který ten výstup zobrazuje.
Zobrazuje ho proto, posíláš standardní výstup programu na standardní vstup less pomocí roury (|).
Celoterminálové programy přesměrovat nejde/nemá smysl.
Po vyjasnění základních pojmů by měla tvá otázka přestat dávat smysl i tobě.
root@server:~#Spustím nějaký můj kód a v Cl vidím
root@server:~#/home/kod.sh | lessTeď proběhne celý kód a po ukončení stisknu "q"a v CL vidím
root@server:~#/home/kod.sh | less root@server:~#Nic se v CL nevypisuje co ten můj program udělal, přesto jsem v terminálu viděl všechno co program dělal. Tohle potřebuji, ale jak jsem psal, pokud mám kód.sh který potřebuje potvrzení od uživatele třeba pro pokračování běhu programu nebo má vyplnit nějaký text nutný pro pokračování v běhu programu jsem v koncích, less mi to nezobrazí a toto je můj problém. Potřebuji po spuštění z CL vidět i po ukončení toho programu jako poslední řádek v CL jak spouštím daný program, nevím jstli je to lepší, mám pocit, že se do toho zamotávám
přesto jsem v terminálu viděl všechno co program dělal.Nikoli. Viděl jsi to, co program naráz vypsal na standardní výstup, než skončil, pak skončil, a začal jsi výstup prohlížet lessem. Je to víceméně ekvivalentní tomuto:
/home/kod.sh >soubor less souborStačí vypisovat postupně, aby bylo vidět, že to nefunguje, jak si představuješ:
while true; do date; sleep 1; done | lessPokud z nějakého speciálního záhadného důvodu potřebuješ mít ‚čistý‘ terminál a nevadí ti, že už se nedokážeš k výstupu programu nikdy dostat, spouštěj program pokaždé v novém
screen
u:
screen program...Tam si můžeš dělat, co chceš, a až screen ukončíš, tak zmizí. Představa, že budeš nějak současně interagovat s původním programem i nějakým prohlížečem, je nesmyslná.
A který program má na to Y reagovat? Ten prohlížeč nebo původní program?Reagovat na Y/N by měl ten původní program, ne ten prohlížeč, ten by to měl jen zobrazit.
Proto následuje otázka, jak to poznat. Prohlížeč bude třeba též používat Y a N.Jak poznat co? Moc nerozumím co myslíš, Jako jak prohlížeč pozná jakou stisk user klávesu?
v příkazové řádce není ani památky o tom, že jsem něco spouštěl
tmux new-session ./muj-skript 1>/dev/null 2>&1
V "příkazové řádce" pak opravdu není ani památky o tom, že se něco spouštělo. Dokonce není potřeba mačkat klávesu q
jako v less
-u
#!/bin/bash
#tvuj prikaz, nahrad to necim uzitecnym
cmd="ls -l .."
A=0;
#spocitani radek a vystup
while read -r line ; do
A=$(($A+1))
echo $line
done < <($cmd)
read
#smazani toho, co bylo vylezle
for r in $(seq 0 $A) ; do
echo -ne "\033[M\033[K"
done;
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.