Komentáře
- Pro ty, kteří zde skončí na Googlu, můžete také zvážit tuto odpověď ( unix.stackexchange.com/a/164017/103505 ), abyste vložili celý kód chcete výstup ve funkci ve skriptu a poté přesměrovat výstup této funkce.
 
Odpovědět
Metoda, kterou jsem našel, aby zachytil veškerý výstup z jakékoli relace, je zahájit novou relaci bash a tee do souboru protokolu. je to opravdu užitečné pro sledování více než jen skriptu.
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
nebo můžete skript jednoduše vypálit
 ./myscript.sh | tee ./myscript.log #this will log only the output of the script. 
Komentáře
Odpověď
 Vždy můžete vyvolat script uvnitř skriptu na zaznamenat vše. 
 Pokud chcete vytisknout a zaznamenat vše současně v bash skriptu na log.txt: 
 Zobrazení protokolu 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 
Komentáře
-  Pokud správně rozumím (některá vysvětlení by pomohla :), skript se pokouší zjistit, zda ' běží pod 
scripta znovu se nespustit. Od verze Ubuntu 20 to vypadá, že$SCRIPTnení nastaven, takže skript přejde do nekonečné smyčky. -  Dobrý nápad použít 
scriptprotože umožňuje interaktivní výstup terminálu, např Carriage Return, do práce. Ve skutečnosti se příkazy, které zobrazují jednořádkový postup průběhu (například archivátory), chovají normálně . Pokud jde o řešení problému nekonečné smyčky, můžeme otestovat úroveň shellu :if (( $SHLVL < 3 )); then script...; fi. -  Argumenty skriptů také skončí zřetězením a předáním v argumentu  code  do shellu spuštěného 
script(ne/bin/bash, tento argument/bin/bashje pomocí util-linuxscript) 
ignorován div>
Odpověď
Chcete použít tričko .
Příklad:
echo "Hello World" | tee out.txt 
Tím se vytvoří soubor out.txt s výstupem z příkazu a vytiskne se na obrazovku. Pokud chcete soubor přidat, použijte „tee -a název souboru“.
echo "Hello" | tee -a out.txt echo "World" | tee -a out.txt 
out.txt bude mít dva řádky Hello a World (bez -a it bude mít pouze svět)
Pokud chcete uložit celý skript a vygenerovat celý skript:
./script.sh | tee output.txt 
Komentáře
- Vaše řešení řeší STDOUT, ale ne STDERR
 - unix.stackexchange.com/a/61932/268823 vysvětluje, jak dělat STDOUT a STDERR
 - Nemyslím si ' že to neodpovídá na otázku, protože požadavek # 1 byl " spustit ./myscript.sh bez dalších konstrukcí shellu ".
 - Myslím, že jedním ze způsobů, jak to udělat, by bylo dát vše do funkce a na konci použít tričko. To by efektivně fungovalo jako start a stop zachycení. A přesměrování STDERR, pokud je to záměr.
 
2>&1>, a proto jsem sdílel možnost pro tee.