Làm thế nào để chuyển hướng đầu ra đến màn hình cũng như một tập tin?


12

Mục đích của tôi là ghi nhật ký tất cả đầu ra từ một tập lệnh vào một thư mục mà tập lệnh sẽ tạo.

Ví dụ: tôi có:

~/.abc.sh:

#! /bin/bash
rails new myapp

Khi tôi chạy ...

cd ~/code
. ~/.abc.sh

... Điều đó sẽ tạo ra một ứng dụng Rails mới trong thư mục ~/code/myapp.

Khi Rails đang tạo một ứng dụng, nó sẽ xuất ra rất nhiều văn bản mà tôi muốn chụp và lưu trữ trong một tệp nhật ký trong cùng thư mục mà railslệnh mới được tạo. Tôi cũng muốn hiển thị văn bản đó trong thiết bị đầu cuối là tốt.

Làm thế nào để tôi đi về làm điều này?

Câu trả lời:


23

Bạn có thể sử dụng teelệnh cho điều đó:

command | tee /path/to/logfile

Tương tự mà không ghi vào vỏ sẽ là:

command > /path/to/logfile

Nếu bạn muốn chắp thêm ( >>) và hiển thị đầu ra trong trình bao, hãy sử dụng -atùy chọn:

command | tee -a /path/to/logfile

Xin lưu ý rằng đường ống sẽ chỉ bắt được thiết bị xuất chuẩn, lỗi đối với thiết bị xuất chuẩn không được xử lý bởi đường ống tee. Nếu bạn muốn ghi lại lỗi (từ stderr), hãy sử dụng:

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

Điều này có nghĩa là: chạy commandvà chuyển hướng luồng stderr (2) sang thiết bị xuất chuẩn (1). Điều đó sẽ được chuyển đến đường ống với teeứng dụng.


Ý bạn là ~/.abc.sh | tee <file>sao Nếu vậy, vấn đề là tôi không biết kịch bản nào sẽ tạo ra ứng dụng khi tôi gọi nó, vậy làm thế nào để tôi biết phải đưa ra điều gì trong cuộc filetranh luận? (Cảm ơn những ví dụ tuyệt vời)
Zabba

@Zabba: còn việc tạo một tệp tạm thời và di chuyển nó sau đó thì sao?
Lekensteyn

Ok, nên làm việc :). Liên quan đến điều đó, làm cách nào để tạo một tệp tạm thời với một tên ngẫu nhiên mà sau đó tôi có thể xuất ra và sau đó sao chép vào một vị trí mong muốn? Có một số lệnh tích hợp để có được "tên tệp tạm thời" không?
Zabba

@Zabba: lệnh cho điều đó là mktemp. Xem trang hướng dẫn man mktemp.
Lekensteyn

, Làm việc như một bùa mê
Sun Junwen

0

scriptsẽ bắt đầu một phiên tương tác và ghi nhật ký tất cả đầu ra (stdout / stderr, v.v.) vào một tệp hoặc (với -ctham số) sẽ chạy một lệnh và ghi nhật ký đầu ra của nó.

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

Lưu ý: trong phiên tương tác, bạn có thể dừng ghi chỉ bằng cách thoát phiên như bình thường (ví dụ exithoặc Ctrl-D).

Để ghi phiên với phát lại video, bạn cũng có thể thử asciinema .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.