Çıkışı ekrana ve bir dosyaya nasıl yönlendirirsiniz?


12

Amacım bir komut dosyasındaki tüm çıktıları komut dosyasının oluşturacağı bir dizine kaydetmek.

Örneğin, ben var:

~/.abc.sh:

#! /bin/bash
rails new myapp

Koştuğumda ...

cd ~/code
. ~/.abc.sh

... bu dizinde yeni bir Raylar uygulama oluşturur ~/code/myapp.

Rails bir uygulama oluştururken, yakaladığım ve railsyeni oluşturduğunuz komutun aynı dizindeki bir günlük dosyasında saklamak istediğim bir sürü metin çıktı . Ayrıca bu metni terminalde de görüntülemek istiyorum.

Bunu nasıl yapabilirim?

Yanıtlar:


23

Bunun için teekomutu kullanabilirsiniz :

command | tee /path/to/logfile

Kabuğa yazılmadan eşdeğer:

command > /path/to/logfile

>>Çıktıyı kabuğa eklemek ( ) eklemek ve çıktıyı göstermek istiyorsanız , -aseçeneği kullanın:

command | tee -a /path/to/logfile

Borunun sadece stdout'u yakalayacağını, stderr'deki hataların boru ile işlenmediğini lütfen unutmayın tee. Hataları (stderr'den) kaydetmek istiyorsanız, şunu kullanın:

command 2>&1 | tee /path/to/logfile

Bu şu anlama gelir: commandstderr akışını (2) stdout'a (1) çalıştırın ve yönlendirin. Bu teeuygulama ile boruya geçirilecektir .


Bunu mu demek istediniz ~/.abc.sh | tee <file>? Eğer öyleyse, o zaman sorun ben onu aradığımda komut dosyası hangi dizinde uygulamayı oluşturacağını bilmiyorum, bu yüzden fileargümanda ne vereceğini nasıl bilebilirim ? (Harika örnekler için teşekkürler)
Zabba

@Zabba: geçici bir dosya oluşturup daha sonra taşımaya ne dersiniz?
Lekensteyn

Tamam, bu işe yaramalı :). Bu bağlamda, daha sonra çıktısını alıp daha sonra istenen bir konuma kopyalayabileceğim rastgele bir adla geçici dosyayı nasıl oluştururum? "Geçici dosya adı" almak için yerleşik komut var mı?
Zabba

@Zabba: bunun için komut mktemp. Kılavuz sayfasına bakınız man mktemp.
Lekensteyn

跪拜, bir cazibe gibi
çalış

0

scriptetkileşimli bir oturum başlatır ve tüm çıktıyı (stdout / stderr vb.) bir dosyaya kaydeder veya ( -cparametreyle) bir komut çalıştırır ve çıktısını günlüğe kaydeder .

script -c ~/.abc.sh -f abc.log

Not: Etkileşimli bir oturumda, oturumdan normalde yaptığınız gibi çıkarak (örneğin exitveya Ctrl-D) kaydı durdurabilirsiniz .

Video oynatmayla oturum kaydı için asciinema'yı da deneyebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.