Kommentarer
- For de som havner her fra Google, kan du også vurdere dette svaret ( unix.stackexchange.com/a/164017/103505 ) for å bare sette all koden du vil sende ut en funksjon i skriptet og omdirigere utdataene til den funksjonen.
 
Svar
En metode jeg fant for å fange opp all utdata fra en hvilken som helst økt, er å starte en ny bash-økt og tee til en loggfil. det er veldig nyttig for å spore mer enn bare et skript.
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
eller du kan bare teppe skriptet det er selv
 ./myscript.sh | tee ./myscript.log #this will log only the output of the script. 
Kommentarer
Svar
 Du kan alltid påkalle script i et skript for å logg alt. 
 Når det gjelder å skrive ut og logge alt samtidig i et bash-skript til log.txt: 
 Ser loggen 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 
Kommentarer
-  Hvis jeg forstår riktig (noen forklaringer vil hjelpe :), prøver skriptet å oppdage om det ' kjører under 
script, og ikke kjør selv på nytt. Fra og med Ubuntu 20 ser det ut til at$SCRIPTikke er satt, så skriptet går i en uendelig løkke. -  God idé å bruke 
scriptskjønt, fordi det gir mulighet for interaktiv terminalutgang, f.eks Vognretur, til jobb. Faktisk oppfører kommandoer som viser fremgangsutgang med én linje (for eksempel arkiver), normalt . Når det gjelder å løse det uendelige løkkeproblemet, kan vi teste skallnivået :if (( $SHLVL < 3 )); then script...; fi. -  Også slutter argumentene til skriptene å bli sammenkoblet og overført i  kode  argumentet til skallet startet av 
script(ikke/bin/bash, at/bin/bashargument ignoreres med util-linuxscript) 
Svar
Du vil bruke tee .
Eks:
echo "Hello World" | tee out.txt 
Dette skaper en fil out.txt med utdata fra kommandoen og skriver den ut på skjermen. Bruk «tee -a filnavn» hvis du vil legge til filen.
echo "Hello" | tee -a out.txt echo "World" | tee -a out.txt 
out.txt vil ha to linjer Hello and World (uten -a det ville bare ha verden)
Hvis du vil lagre hele skriptet og sende ut hele skriptet:
./script.sh | tee output.txt 
Kommentarer
- Løsningen din adresserer STDOUT, men ikke STDERR
 - unix.stackexchange.com/a/61932/268823 forklarer hvordan man gjør STDOUT og STDERR
 - Jeg tror ikke ' t tror dette svarer på spørsmålet fordi krav nr 1 var " kjør ./myscript.sh uten ytterligere skallkonstruksjoner ".
 - Jeg antar at en måte å gjøre det på ville være å sette alt i en funksjon, og bruke tee på slutten. Det ville effektivt fungere som en start og stopp fangst. Og omdirigere STDERR hvis det er intensjonen.
 
2>&1>output i stedet for tee, og det var derfor jeg delte muligheten for tee.