Portál AbcLinuxu, 5. května 2025 21:33

Dotaz: Přesměřování deskriptorů v bashi

23.1.2013 16:50 Jarda
Přesměřování deskriptorů v bashi
Přečteno: 280×
Odpovědět | Admin
Mám skript, kterým přesměřuji na začátku stdout a stdin do souboru, ale zároveň nechávám hlášky vypisovat i na terminál, to dělám následovně:
exec 1> >(tee -a /root/log.txt )
exec 2> >(tee -a /root/log.txt >&2 )
Jenomže bych se pak rád, ještě v rámci toho skriptu vrátil k původnímu nastavení těch deskriptorů, jenomže vůbec nevím jak nato, např: uzavření stderr pomocí "exec 2>&-" úplně zablokuje tty.

Díky za rady!

Ř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

Řešení 1× (frEon)
23.1.2013 17:17 Sten
Rozbalit Rozbalit vše Re: Přesměřování deskriptorů v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Uložte si ty deskriptory někam bokem:
exec 11>&1
exec 12>&2
exec 1> >(tee -a /root/log.txt)
exec 2> >(tee -a /root/log.txt >&2)
...
exec 1>&11
exec 2>&12
23.1.2013 22:46 BruXy
Rozbalit Rozbalit vše Re: Přesměřování deskriptorů v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na začátku skriptu je dobré podívat se, kam ty deskriptory ukazují, např. pomocí:

ls -l /proc/$$/fd

-- to vypíše všechy deskriptory použité daným procesem ($$ -- vlastní PID skriptu), např. /dev/pts/15.

Nebo, jiná možnost (asi možno použít i v systémech bez procfs)

lsof -d1,2 -a -p $$

Pak stačí danou device s terminálem uložit do proměnné a v míste obnovení půdovních dát tu proměnnou, ve výsledku to bude dělat následující:

exec 1>/dev/pts/15 exec 2>/dev/pts/15

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.