Nasıl bir dosya için bir komut çıktısını kaydedebilirim?
Herhangi bir yazılım kullanmadan bir yolu var mı? Nasıl yapılacağını bilmek istiyorum.
Nasıl bir dosya için bir komut çıktısını kaydedebilirim?
Herhangi bir yazılım kullanmadan bir yolu var mı? Nasıl yapılacağını bilmek istiyorum.
Evet, bu mümkün, sadece çıktıyı yönlendirin (AKA stdout bir dosya için :
SomeCommand > SomeFile.txt Veya veri eklemek istiyorsanız:
SomeCommand >> SomeFile.txtEğer isterseniz stderr bunu da kullan:
SomeCommand &> SomeFile.txt ya da bunu eklemek için:
SomeCommand &>> SomeFile.txt eğer ikisine de sahip olmak istiyorsan stderr ve çıktı konsolda görüntülenir ve bir dosyada bunu kullan:
SomeCommand 2>&1 | tee SomeFile.txt(Yalnızca çıktıyı istiyorsanız, bırakın 2 üzerinde)
Bir komutun çıktısını bir dosyaya yazmak için temel olarak yaygın olarak kullanılan 10 yol vardır.
Lütfen unutmayın
n.e.sözdizimi sütununda "mevcut değil" anlamına gelir.
Bir yolu var, ama sütuna sığmayacak kadar karmaşık. Bununla ilgili Liste bölümünde yararlı bir bağlantı bulabilirsiniz.
|| visible in terminal || visible in file || existing Syntax || StdOut | StdErr || StdOut | StdErr || file ==========++==========+==========++==========+==========++=========== > || no | yes || yes | no || overwrite >> || no | yes || yes | no || append || | || | || 2> || yes | no || no | yes || overwrite 2>> || yes | no || no | yes || append || | || | || &> || no | no || yes | yes || overwrite &>> || no | no || yes | yes || append || | || | || | tee || yes | yes || yes | no || overwrite | tee -a || yes | yes || yes | no || append || | || | || n.e. (*) || yes | yes || no | yes || overwrite n.e. (*) || yes | yes || no | yes || append || | || | |||& tee || yes | yes || yes | yes || overwrite|& tee -a || yes | yes || yes | yes || appendcommand > output.txt
Standart çıktı akışı yalnızca dosyaya yönlendirilecek, terminalde görünmeyecektir. Dosya zaten varsa, üzerine yazılır.
command >> output.txt
Standart çıktı akışı yalnızca dosyaya yönlendirilecek, terminalde görünmeyecektir. Dosya zaten varsa, yeni veriler dosyanın sonuna eklenir.
command 2> output.txt
Standart hata akışı yalnızca dosyaya yönlendirilir, terminalde görünmez. Dosya zaten varsa, üzerine yazılır.
command 2>> output.txt
Standart hata akışı yalnızca dosyaya yönlendirilir, terminalde görünmez. Dosya zaten varsa, yeni veriler dosyanın sonuna eklenir.
command &> output.txt
Hem standart çıktı hem de standart hata akışı yalnızca dosyaya yönlendirilir, terminalde hiçbir şey görünmez. Dosya zaten varsa, üzerine yazılır.
command &>> output.txt
Hem standart çıktı hem de standart hata akışı yalnızca dosyaya yönlendirilir, terminalde hiçbir şey görünmez. Dosya zaten varsa, yeni veriler dosyanın sonuna eklenir..
command | tee output.txt
Standart çıkış akışı dosyaya kopyalanacak, terminalde görünmeye devam edecektir. Dosya zaten varsa, üzerine yazılır.
command | tee -a output.txt
Standart çıkış akışı dosyaya kopyalanacak, terminalde görünmeye devam edecektir. Dosya zaten varsa, yeni veriler dosyanın sonuna eklenir.
(*)
Bash , yalnızca stderr'yi ikinci bir komuta yönlendirmeye izin veren bir steno sözdizimine sahip değildir; bu, burada aşağıdakilerle birlikte gerekli olacaktır tee yine masayı tamamlamak için. Gerçekten böyle bir şeye ihtiyacınız varsa, lütfen bakın "Nasıl stderr boru ve stdout değil?" yığın Taşması üzerine bunun nasıl yapılabileceğinin bazı yolları için, örneğin akışları değiştirerek veya işlem değiştirmeyi kullanarak.
command |& tee output.txt
Hem standart çıktı hem de standart hata akışları, terminalde görünmeye devam ederken dosyaya kopyalanır. Dosya zaten varsa, üzerine yazılır.
command |& tee -a output.txt
Hem standart çıktı hem de standart hata akışları, terminalde görünmeye devam ederken dosyaya kopyalanır. Dosya zaten varsa, yeni veriler dosyanın sonuna eklenir.
Ayrıca şunları da kullanabilirsiniz tee çıktıyı bir dosyaya göndermek için:
command | tee ~/outputfile.txtKüçük bir değişiklik de stderr'yi yakalayacaktır:
command 2>&1 | tee ~/outputfile.txtveya biraz daha kısa ve daha az karmaşık:
command |& tee ~/outputfile.txttee bunu yapabilmek istiyorsanız kullanışlıdır. komut çıktısını canlı görüntülerken yakalayın.
Komut çıktısını bir dosyaya yönlendirebilirsiniz:
your_command >/path/to/fileKomut çıktısını üzerine yazmak yerine bir dosyaya eklemek için:
your_command >>/path/to/file
Bir donanım dikkate -
Çeşitli komut dosyaları, günlük dosyanızı karıştırmak istemeyebileceğiniz çıktıya renk kodları enjekte eder.
Bunu düzeltmek için programı kullanabilirsiniz sed o kodları çıkarmak için. Örnek:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
Burada iki farklı soru var. Birincisi başlıkta:
Terminal çıktısını bir dosyaya nasıl kaydederim?
İkinci soru bedende:
Nasıl bir dosya için bir komut çıktısını kaydedebilirim?
Burada yayınlanan tüm cevaplar ikinci soruyu ele alıyor, ancak hiçbiri harika bir cevabı olan ilk soruyu ele almıyor. Unix ve Linux:
Bu cevap, az bilinen bir komut kullanır script siz yazana kadar tüm kabuğunuzun çıktısını bir metin dosyasına kaydeder exit. Komut çıktısı hala ekranınızda görünür, ancak metin dosyasında da görünür.
İşlem basittir. Kullanmak:
$ script ~/outputfile.txtScript started, file is /home/rick/outputfile.txt$ command1$ command2$ command3$ exitexitScript done, file is /home/rick/outputfile.txtArdından, 1, 2 ve 3 komutlarının kaydedilmiş çıktısına bakın:
cat ~/outputfile.txtBu şuna benzer önceki cevap -den:
command |& tee ~/outputfile.txt|& tee ~/outputfile.txt her birinden sonra commnd.script komut, yeniden yüklemenin avantajını (veya dezavantajını) ekledi ~/.bashrc ne zaman başlıyor.script komut, komut istemini gösterir ($PS1) girdiğiniz komut (lar) ı takip eder.script komut tüm ayrıntıları tam renkli olarak kaydeder.İçin cron işler vb. Bash uzantılarından kaçınmak istersiniz. Eşdeğer POSIX sh yönlendirme operatörleri şunlardır
Bash POSIX------------ --------------foo &> bar foo >bar 2>&1foo &>> bar foo >>bar 2>&1foo |& bar foo 2>&1 | barPOSIX tesisinin bir anlamda daha basit ve anlaşılır olduğunu fark edeceksiniz. Bu &> sözdizimi ödünç alındı csh bu da seni zaten bunun kötü bir fikir olduğuna ikna etmeli.
some_command | tee command.log ve some_command > command.log komut çıktısını kaydetmemeleri sorunu var command.log gerçek zamanlı olarak dosyalayın.
Bu sorunu önlemek ve komut çıktısını gerçek zamanlı olarak kaydetmek için şunları ekleyebilirsiniz unbuffer bu gelir expect paket.
Örnek:
sudo apt-get install expectunbuffer some_command | tee command.logunbuffer some_command > command.logVarsayarak log.py içeriyor:
import timeprint('testing')time.sleep(100) # sleeping for 100 secondsçalıştırabilirsiniz unbuffer python log.py | tee command.log veya unbuffer python log.py > command.log
Daha fazla bilgi: Komut çıktısını bir dosyaya gerçek zamanlı olarak nasıl kaydedebilirim?
Komut çalıştırılırken dosyaya çıktı almak istiyorsanız:
script -c ./path/to/executable.bash -f log.txt