2010-05-15 68 views
14

Tôi đang chạy một nhiệm vụ trên CLI, nhắc tôi cho một đầu vào có/không.Làm thế nào để đường dẫn đầu ra của một lệnh để tập tin trên Linux

Sau khi chọn lựa chọn, một lượng lớn thông tin sẽ cuộn trên màn hình - bao gồm một số lỗi. Tôi muốn ống đầu ra này vào một tập tin để tôi có thể thấy các lỗi. Một '>' đơn giản không hoạt động vì lệnh sẽ nhập vào bàn phím.

Tôi đang chạy trên Ubuntu 9.1.

+0

Tên của lệnh bạn đang chạy là gì? chế tạo? – Cristina

Trả lời

1

Sử dụng 2> thay vì chỉ >.

1

Nếu chương trình được viết bởi một người lành mạnh, điều bạn có thể muốn là stderr không phải là stdout. Bạn sẽ đạt được điều này bằng cách sử dụng một cái gì đó giống như

foo 2> errors.txt

37
command &> output.txt 

Bạn có thể sử dụng để chuyển hướng &> cả stdout và stderr vào một tập tin. Đây là viết tắt của command > output.txt 2>&1 trong đó 2>&1 có nghĩa là "gửi stderr đến cùng một vị trí như stdout" (stdout là tập tin mô tả 1, stderr là 2).

Đối với các lệnh tương tác Tôi thường không bận tâm lưu vào một tập tin nếu tôi có thể sử dụng less và đọc kết quả ngay lập tức:

command 2>&1 | less 
+1

Việc chuyển hướng cả stdout và stderr sang một tệp có nghĩa là anh ta sẽ không thấy lời nhắc thực tế. Tôi không thể thấy anh ta sẽ tốt hơn thế nào so với tình huống anh ta mô tả trong câu hỏi của anh ta. – Epcylon

+0

Bạn đã sử dụng '&' ở cả hai bên của các số ('1',' 2'). Đang sử dụng '& 2' hoặc' 2 & ', thậm chí' 2 &> 1' hoặc '2> & 1' có tạo ra sự khác biệt nào không? –

+0

@FredrickGauss Rất tiếc! Tôi đã có một lỗi đánh máy trong câu trả lời của tôi. '2 &> 1' không hợp lệ. Tôi muốn viết '2> & 1'. –

4
echo yes | command > output.txt 

Tùy thuộc vào cách các lệnh đọc nó đầu vào (một số chương trình loại bỏ bất cứ điều gì đã được trên stdin trước khi nó hiển thị dấu nhắc của nó, nhưng hầu hết không), điều này sẽ làm việc trên bất kỳ môi trường CLI lành mạnh.

+1

Tôi nghĩ bạn có nghĩa là 'echo yes | command' thay vì 'command <\' echo yes \ ''. (Cũng có lệnh 'yes' có thể hữu ích.) –

+0

Bạn nói đúng.Tôi bắt đầu nghĩ rằng anh ta có thể đưa đầu vào của mình vào một tập tin, và thay đổi ý định của tôi chỉ đơn giản là sử dụng echo, nhưng quên thay đổi dòng lệnh để phù hợp. Sửa lỗi ngay bây giờ. – Epcylon

+0

Điều này định dạng lại các json tôi muốn viết một tập tin không may. – metanerd

1

bạn có thể sử dụng 2> tùy chọn để gửi lỗi tới tệp.

dụ:

lệnh 2> error.txt

(sử dụng phương án 2>) --- xem nếu họ sẽ được bất kỳ lỗi trong khi thực hiện các lệnh nó sẽ gửi nó đến tập tin error.txt.

Các vấn đề liên quan