Kommentit
- Niille, jotka päätyvät tänne Googlesta, saatat myös harkita tätä vastausta ( unix.stackexchange.com/a/164017/103505 ) vain asettamaan kaikki koodit haluat tulostaa komentosarjan funktiossa ja ohjata sitten kyseisen funktion lähdön.
Vastaa
Menetelmä, jonka löysin kaappaamaan minkä tahansa istunnon kaikki lähdöt, on aloittaa uusi bash-istunto ja tee lokitiedostoon. sen todella hyödyllinen seuranta enemmän kuin vain komentosarja.
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
tai voit vain asettaa käsikirjoituksen itse
./myscript.sh | tee ./myscript.log #this will log only the output of the script.
Kommentit
suoritettiin ./myscript.sh ilman ylimääräisiä kuorirakenteita ".
>
-lähtöä tee: n sijasta ja siksi jaoin vaihtoehdon tee. vastaus
Voit aina kutsua script
komentosarjassa kirjaa kaikki.
Kun haluat tulostaa ja kirjata kaiken samanaikaisesti bash-komentosarjassa osoitteeseen log.txt
:
Lokin tarkasteleminen 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
kommentit
- Jos ymmärrän oikein (jotkut selitykset auttaisivat :), komentosarja yrittää havaita, toimiiko '
script
eikä suorita itseään uudelleen. Ubuntu 20: sta lähtien näyttää siltä, että$SCRIPT
ei ole asetettu, joten komentosarja menee äärettömään silmukkaan. - Hyvä idea käyttää
script
, koska se sallii esimerkiksi vuorovaikutteisen päätelaitteen Vaunun paluu töihin. Itse asiassa komennot, jotka näyttävät yhden rivin edistymislähdön (esimerkiksi arkistoijat), käyttäytyvät normaalisti . Mitä tulee loputtoman silmukan ongelman ratkaisemiseen, voimme testata kuoren tason :if (( $SHLVL < 3 )); then script...; fi
. - Lisäksi komentosarjojen argumentit yhdistetään ja välitetään code -argumentissa kuorelle, jonka aloitti
script
(ei/bin/bash
, että/bin/bash
-argumentti ohitetaan util-linuxillascript
)
Vastaus
Haluat käyttää teetä .
Esimerkki:
echo "Hello World" | tee out.txt
Tämä luo tiedoston out.txt komennon lähdön kanssa ja tulostaa sen näytölle. Käytä ”tee -a-tiedostonimi”, jos haluat liittää tiedostoon.
echo "Hello" | tee -a out.txt echo "World" | tee -a out.txt
out.txt: ssä on kaksi riviä Hei ja Maailma (ilman -a sitä olisi vain maailmaa)
Jos haluat tallentaa koko käsikirjoituksen ja tulostaa koko käsikirjoituksen:
./script.sh | tee output.txt
Kommentit
- Ratkaisusi osoite on STDOUT, mutta ei STDERR.
- unix.stackexchange.com/a/61932/268823 selittää, miten STDOUT ja STDERR tehdään
- En ' usko, että tämä vastaa kysymykseen, koska vaatimus nro 1 oli " ajaa ./myscript.sh ilman muita kuorirakenteita ".
- Yksi tapa tehdä se olisi laittaa kaikki funktioon ja käyttää tee lopussa. Se toimisi tehokkaasti aloituksen ja lopetuksen kaappaamisena. Ja ohjaamalla STDERR uudelleen, jos se on tarkoitusta.
2>&1