Rögzítse a szkript összes kimenetét egy fájlba (magából a szkriptből) [duplicate]

iv class =” rács – fl1 lh-lg “cella Azok számára, akik ide kerülnek a Google-tól, fontolóra veheti ezt a választ ( unix.stackexchange.com/a/164017/103505 ), hogy csak beírja az összes kódot ki akar adni egy függvényt a szkriptben, majd átirányítja a függvény kimenetét.

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

  • A megoldásod az STDOUT címet viseli, de az STDERR-t nem
  • Példát adtam a következővel: 2>&1
  • Nem ' nem gondolom, hogy ez megválaszolja a kérdést, mert az 1. követelmény " lefutott ./myscript.sh további shell-konstrukciók nélkül ".
  • Ezt a kérdést 6 órája szerkesztették, nem csináltam ' nincs meg az információ, amikor először válaszoltam a kérdésre. A tee helyett a > kimenetet használta, és ezért megosztottam a tee opciót.

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-linux script)

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük