bash, jak výstup nebo pouze chyba

bash, jak výstup nebo pouze chyba
« kdy: 20. 10. 2021, 09:36:01 »
Ahoj, řeším takovou hloupost a dost se v tom plácám.
Volám z PHP exec() na Bash příkaz, který má generovat nějaký výstup. Problém je, že při chybě se hláška spojí s výstupem a já potřebuju pouze text samotné chyby.
IMHO nejlíp asi formulovat příkaz tak, aby na výstupu byl pouze výsledek příkazu, NEBO text chyby. Jde to takto zapsat?
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)


Re:bash, jak výstup nebo pouze chyba
« Odpověď #1 kdy: 20. 10. 2021, 10:15:01 »
Pokud nastane chyba, zavolat ten samy prikaz znovu a presmerovat stout na /dev/null
…. 1>/dev/null

Re:bash, jak výstup nebo pouze chyba
« Odpověď #2 kdy: 20. 10. 2021, 10:33:57 »
Nemuzete pouzit neco chytrejsiho, co umi zpracovat stdout i stderr?

V Bashi je to celkem zbytecny prepisovat imho.

https://stackoverflow.com/questions/2320608/php-stderr-after-exec

Re:bash, jak výstup nebo pouze chyba
« Odpověď #3 kdy: 20. 10. 2021, 10:55:07 »
Nemuzete pouzit neco chytrejsiho, co umi zpracovat stdout i stderr?

Díky!, přesně tohle jsem potřeboval.

Čumím na to jako puk, jdu se napřed zahrabat do houští a pak se dál učit...  ;)
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)

Re:bash, jak výstup nebo pouze chyba
« Odpověď #4 kdy: 21. 10. 2021, 20:52:54 »
Pres fifo , pro inspiraci:

napriklad:
1a] mkfifo /tmp/stdout
1b] mkfifo /tmp/stderr

V jednom okne (bude cekat na vstup):
2a] tail -f /tmp/stdout
V dalsim okne
2b] tail -f /tmp/stderr

a pak odzkousime:
prikaz bez chyby:
3a] mount >/tmp/stdout 2>/tmp/stderr

s chybou:
3b] mount /d >/tmp/stdout 2>/tmp/stderr

a pak samozrejme nezapomenout uklidit
rm /tmp/std*

J
« Poslední změna: 21. 10. 2021, 20:58:02 od synuhed »


Re:bash, jak výstup nebo pouze chyba
« Odpověď #5 kdy: 21. 10. 2021, 21:07:35 »
A jeste jednodussi inspirace:

OK prikaz:
 mount |( while read a; do echo OUT:$a; done )
Chyba:
 mount /d |( while read a; do echo OUT:$a; done )

co nema OUT: na zacatku je chyba.. jen bacha na vyhodnoceni error code..
J