Zdravím, zajímalo by mě, jak v shellu udělat tyto věci související s spouštěním příkazů:
1. mohu spusit nějaký příkaz na pozadí
wget -o out http://neco/soubor &. Nebo bez & na konci, s tím, poběží v popředí. Pokud zmáčknu Ctrl Z, tak se příkaz POZASTAVÍ (modelová situace: server uzavře spojení mezitím) a musím dát příkaz
bg. Co když chci ten příkaz rovnou přehodit na pozadí bez přerušování (nejde mi o to, že pak mohu dát wget -C -, ale jak dostat běžící příkaz na pozadí na jeden zátah bez přerušení, což ale Ctrl Z dělá) ? Zkoušel jsem různé Zkratky Ctrl+* a nenašel odpovídající.
2. Proč příkaz
(a=1;while(true); do sleep 0.4; ((a=a+1)) ;printf "ooo %d lll\n" $a ; done ) funguje dle očekávání, že po přerušení přes Ctrl+Z se pozastaví a lze ho obnovit, zatímco varianta bez závorek kolem celého while souvětí se po Ctrl+Z zastaví, ale po příkazu bg / fg /ručnímu zaslání signálu SIGCONT se to hned ukončí.
Vím, že () spustí nový subproces, což je vidět "i v prohlížeči úloh terminálu". V prvním případě se zastaví celý jen podproces sleep, v druhém se zastaví podproces bash i shell.
Vrtá mi ale hlavou, proč se to neobnoví, mám 2 hypotézy (neodborně formulované:) Buď za to může příkaz sleep, který se prostě neobnoví(, což jsem ale vyloučil, když jsem si hrál s příkazem sleep 5 - při obnovení/fg/bg se obnoví čekání), takže druhá možnost je, ... nevím. Očekával jsem, že smyčka bude pokračovat... Proč?
já:~ user$ a=1;while(true); do sleep 0.4; ((a=a+1)) ;printf "ooo %d lll\n" $a ; done
ooo 2 lll
ooo 3 lll
^Z
[1]+ Stopped sleep 0.4
já:~ user$ fg
sleep 0.4
já:~ user$ ----
-bash: ----: command not found
já:~ user$ (a=1;while(true); do sleep 0.4; ((a=a+1)) ;printf "ooo %d lll\n" $a ; done )
ooo 2 lll
^Z
[1]+ Stopped ( a=1; while ( true ); do
sleep 0.4; ((a=a+1)); printf "ooo %d lll\n" $a;
done )
já:~ user$ fg
( a=1; while ( true ); do
sleep 0.4; ((a=a+1)); printf "ooo %d lll\n" $a;
done )
ooo 3 lll
ooo 4 lll
^C
3. Co dělají řídící příkazy Ctrl+ {O,M,I,U,R,J} různě umožní "psát" do výpisu, ale to je ,co pozoruji... Očko nechá běžet program, ale nevypisuje výstup.