Portál AbcLinuxu, 10. května 2025 08:24

Dotaz: Bash: presmerovanie I/O na STDOUT aj do suboru

15.3.2012 17:11 GeorgeWH | skóre: 42
Bash: presmerovanie I/O na STDOUT aj do suboru
Přečteno: 189×
Odpovědět | Admin
Zdravim.

Narazil som na problem s I/O presmerovanim v bashi. Skusim vysvetlit situaciu, resp. podmienky:

1. hlavny skript spusta niekolko dalsich skriptov

2. ak akykolvek prikaz skonci non-zero statusom, beh skriptov sa musi skoncit - to zabezpeci "set -e"

3. vystup (STDOUT aj STDERR) vsetkych skriptov musi byt presmerovany na STDOUT a zaroven aj do jedneho logovacieho suboru

4. presmerovanie sa nemoze aplikovat na samostatne prikazy v podskriptoch, lebo ich je vela

1. nefunkcne riesenie:
#!/bin/bash
#

set -e

source script1 2>&1 | tee -a log.txt
source script2 2>&1 | tee -a log.txt
toto nefunguje, lebo aj ked napr. script1 skonci chybou, tak prikaz 'tee -a log.txt' v pipe skonci stale 0 a teda sa neuplatni 'set -e'.

2. nefunkcne riesenie:
#!/bin/bash
#

exec > log.txt 2>&1

source script1
source script2
toto nesplna 3. podmienku - neloguje na STDOUT.

Skusal som rozne variacie exec a pipe, ale nic nefungovalo.

Vdaka.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

michich avatar 15.3.2012 17:25 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Bash: presmerovanie I/O na STDOUT aj do suboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
toto nefunguje, lebo aj ked napr. script1 skonci chybou, tak prikaz 'tee -a log.txt' v pipe skonci stale 0 a teda sa neuplatni 'set -e'.
Selhání v tomto případě se dá vynutit volbou pipefail. Hledej v man bash.
15.3.2012 17:33 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Bash: presmerovanie I/O na STDOUT aj do suboru
Ajej :) na to som uplne zabudol. Vdaka.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.