Válasz
Az a módszer, amelyet bármely munkamenet összes kimenetének rögzítésére találtam, egy új bash munkamenet indítása és naplófájlba történő beillesztése. nagyon hasznos egy szkript nyomon követéséhez.
bash | tee ~/bash.log #this will save standard output until the bash session is ended bash | tee ~/bash.log 2>&1 #this will save all output including errors until the bash session is ended
vagy csak beírhatja a szkriptet
./myscript.sh | tee ./myscript.log #this will log only the output of the script.
Megjegyzések
Válasz
A szkript belsejében mindig meghívhatja a script
mindent naplózni.
A nyomtatáshoz és a naplózáshoz egyidejűleg egy bash szkriptben a log.txt
címre:
A napló megtekintése log.txt
:
$ ./a.sh Script started, output file is log.txt teste Script done, output file is log.txt $ cat log.txt Script started on Fri Feb 16 17:57:26 2018 command: /bin/bash -c ./a.sh teste Script done on Fri Feb 16 17:57:26 2018
Megjegyzések
- Ha jól értem (néhány magyarázat segítene :), a szkript megpróbálja felismerni, hogy '
script
, és ne hajtsa végre önmagát. Az Ubuntu 20-tól úgy tűnik, hogy a$SCRIPT
nincs beállítva, ezért a szkript végtelen ciklusba megy. - Jó ötlet a , mert interaktív terminál kimenetet tesz lehetővé, pl Kocsi Vissza, munkába. Valójában az egysoros haladás kimenetet megjelenítő parancsok (például archiválók) normálisan viselkednek . Ami a végtelen hurok problémájának megoldását illeti, tesztelhetjük a héjszintet :
if (( $SHLVL < 3 )); then script...; fi
. - Ezenkívül a szkriptek argumentumai összefűzve a code argumentumban átkerülnek a
script
(nem/bin/bash
, ezt az/bin/bash
argumentumot a util-linuxscript
)
Válasz
A pólót szeretné használni.
Példa:
echo "Hello World" | tee out.txt
Ez létrehozza az out.txt fájlt a parancs kimenetével, és kinyomtatja a képernyőre. Használja a “tee -a fájlnevet”, ha hozzá akarja fűzni a fájlhoz.
echo "Hello" | tee -a out.txt echo "World" | tee -a out.txt
Az out.txt két sorból áll: Hello és a World (-a nélkül) csak világa lenne)
Ha a teljes szkriptet el akarja menteni, és a teljes szkriptet kiadja:
./script.sh | tee output.txt
Megjegyzések
- Az Ön megoldása a STDOUT címet viseli, az STDERR-t nem.
- unix.stackexchange.com/a/61932/268823 elmagyarázza az STDOUT és az STDERR műveleteket
- Nem gondolom, hogy ez megválaszolja a kérdést, mert az 1. követelmény " futtassa ./myscript.sh további héjszerkezetek nélkül ".
- Gondolom, hogy ennek egyik módja az lenne mindent beilleszteni egy funkcióba, és a végén használni a pólót. Ez gyakorlatilag kezdő és leállító rögzítésként működne. És az STDERR átirányítása, ha ez a szándék.
2>&1
>
kimenetet használta, és ezért megosztottam a tee opciót.