Wpis z mikrobloga

Jak wpiszę w skrypcie sh:

set -uo pipeline

exec 2> >(tee -a mylog.log) >&2

to będzie mi wyrzucał na consolę i do pliku mylog.log wszystkie linie kodu co wywołuję + to co printuje się.
Jak napiszę bez:

set -uo pipeline

to będzie mi wyrzucał na cosnolę i do pliku mylog.lo tylko to co printuję.

Czy da się prosto zrobić żeby na consolę szło bez set -uo pipeline, a do pliku z set -uo pipeline ?
#linux #programista15k
  • 7
@Wykopowiedz: da się.
@JanuszJanuszy: set -x w konsoli, czy w pierwszych liniach skryptu jest równoważne z tym co napisałem: #!/usr/bin/env bash -x czy #!/usr/bin/env sh -x.
IMHO czytelniejsze i 'czystsze' jest w pierwszej linii, jak chcesz debugować cały skrypt. Ale to oczywiście kwestia gustu.

@Wykopowiedz: >2 to przekierowanie strumienia błędów. Dlatego to działa, bo wyjściem dla błędów jest konsola. Przekierowanie standardowego wyjścia to: >1,a jak chcesz błędy
@Wykopowiedz:

da się zrobić tak, żeby na consolę też mógł debugować, jeśli się poda -x ?

Na pewno się da, ale IMHO jest to trochę niepotrzebne robienie sobie pod górkę. Do debugowania skryptów, tak jak wspomniał @draxgar używa się flag w shebangu lub uruchamia się skrypt w powłoce w trybie debugowania (bash -x script.sh)
@Wykopowiedz: debug skryptów bash polega na tym, że oprócz tego co skrypt ma zrobić, wypisuje na konsolę każdą linię która się wykonuje. Innymi słowy, jak masz w skrypcie 'echo Wykopowiedz' to zobaczysz dwie linie, jedna z komendą druga z jej wynikiem, coś stylu (pisze z pamięci):

+ echo Wykopowiedz
Wykopowiedz