2012-06-18 28 views
10

Tôi đang chạy lệnh sau đây (trên Ubuntu)làm thế nào để chuyển hướng kết quả của lệnh thời gian linux để một số tập tin

time wget 'http://localhost:8080/upLoading.jsp' --timeout=0 

và nhận được kết quả trong dòng lệnh

real 0m0.042s 
user 0m0.000s 
sys  0m0.000s 

Tôi đã thử như sau:

time -a o.txt wget 'http://localhost:8080/upLoading.jsp' --timeout=0 

và nhận được lỗi sau

-a: command not found 

Tôi muốn nhận được kết quả được chuyển hướng đến một số tệp. Làm thế nào tôi có thể làm điều đó?

+1

Có thể bạn đang sử dụng bash và có lệnh dựng sẵn 'thời gian'. (xem 'thời gian trợ giúp') Lệnh của bạn nên sử dụng'/usr/bin/time' để hoạt động đúng (để khám phá nơi thời gian nhị phân được sử dụng 'thời gian'). Xem xét điều này, bạn phải sử dụng: 'time -o out.txt -a ...' – Lourenco

Trả lời

3

Bạn có thể hướng stdout đầu ra của bất kỳ commmand vào một tập tin bằng cách sử dụng nhân vật >. Để thêm đầu ra vào một tập tin sử dụng >>

Lưu ý rằng trừ khi thực hiện một cách rõ ràng, sản lượng để stderr vẫn sẽ đi đến giao diện điều khiển. Chỉ đạo cảstderrstdout vào dòng đầu ra tương tự sử dụng

command 2>&1 outfile.txt (with bash) 

hoặc

command >& outfile.txt (with t/csh) 

Nếu bạn đang làm việc với bashAll about redirection sẽ cho bạn biết thêm chi tiết và kiểm soát về chuyển hướng.

+3

(thời gian wget ...) 2> out.txt đang hoạt động hoàn hảo. Cảm ơn – Julias

+0

Hãy xem xét '/ usr/bin/time' như tôi đã nhận xét ở trên. Và như vậy, sử dụng một cái gì đó như '/ usr/bin/time -o outfile.txt -a ...' – Lourenco

0

Chính xác time từ GNU viết nó ra để stderr và nếu bạn muốn chuyển hướng nó vào tập tin, bạn có thể sử dụng --output = tham số PATH của time

Xem này http://unixhelp.ed.ac.uk/CGI/man-cgi?time

Và nếu bạn muốn chuyển hướng stdout vào một số tệp, bạn có thể sử dụng > filename để tạo tệp và điền vào hoặc >> filename để thêm vào một số tệp sau lệnh ban đầu.

Nếu bạn muốn chuyển hướng stderr bởi chính mình, bạn có thể sử dụng $ command >&2 your_stderr_output

6

Kiểm tra man time, tôi đoán những gì bạn cần là

time -o o.txt -a ... 

(Lưu ý bạn cần cả -a và -o).

[EDIT:] Nếu bạn đang ở trong bash, bạn cũng phải chăm sóc để viết

/usr/bin/time 

(kiểm tra manpage cho lời giải thích)

+0

Vẫn không hoạt động: '-o: lệnh không tìm thấy' trên máy của tôi. –

+1

Kiểm tra bình luận của Adam (http://stackoverflow.com/a/11082413/384689), đây có lẽ là giải pháp – claasz

+0

Hhmm, tôi không thể nhìn thấy nó không ... vì vậy tôi đã chỉnh sửa câu trả lời của mình. Hy vọng điều này sẽ giúp – claasz

-1

Bạn có thể làm điều đó với > nếu bạn muốn chuyển hướng đầu ra.

Ví dụ:

time wget 'http://localhost:8080/upLoading.jsp' --timeout=0 > output.txt 2>&1 

2>&1 nói để chuyển hướng thiết bị lỗi chuẩn để cùng một tập tin.

Lệnh này sẽ xóa bất kỳ tệp output.txt nào và tạo tệp mới với đầu ra của bạn. Nếu bạn sử dụng >>, nó sẽ nối đầu ra ở cuối của bất kỳ tệp output.txt hiện có nào. Nếu nó không tồn tại, nó sẽ tạo ra nó.

10

-a chỉ được hiểu theo thời gian nhị phân (/ usr/bin/time), Khi chỉ sử dụng thời gian bạn đang sử dụng phiên bản được xây dựng trong bash không xử lý tùy chọn -a, và do đó cố gắng chạy nó như một mệnh lệnh.

/usr/bin/time -o foo.txt -a wget 'http://localhost:8080/upLoading.jsp' --timeout=0 
+0

cả hai -a và -o không hoạt động. Giải pháp là 2> foo.txt – Julias

+2

Tôi tin rằng đây thực sự là câu trả lời đúng. Khi gọi thời gian, hãy gọi/usr/bin/time thay vì sử dụng nội trang của trình bao mà không hỗ trợ các tùy chọn nâng cao. – mattismyname

+0

Chắc chắn, đây là câu trả lời đúng. – Lourenco

0

Cố gắng sử dụng /usr/bin/time vì nhiều vỏ có thực hiện riêng của họ time mà có thể hoặc có thể không hỗ trợ cờ giống như /usr/bin/time

để thay đổi lệnh của bạn để

/usr/bin/time -a -o foo.txt wget .... 
+0

Tôi đã thêm nhận xét này vào câu hỏi để giải thích điều đó. – Lourenco

1
\time 2> time.out.text command 

\time -o time.out.text command 

Câu trả lời này dựa trên các nhận xét trước đó. Nó được thử nghiệm nó hoạt động. Lợi thế của \ trên /usr/bin/ là bạn không cần phải biết thư mục cài đặt của time.

Các câu trả lời này cũng chỉ ghi lại thời gian, chứ không chỉ cho kết quả khác.

0

Còn LANG của bạn thì sao?

$ time -ao o.txt echo 1 
bash: -ao: コマンドが見つかりません 

real 0m0.001s 
user 0m0.000s 
sys  0m0.000s 
$ export|grep LANG 
declare -x LANG="ja_JP.utf8" 

$ LANG=C time -ao o.txt echo 1 
1 

$ cat o.txt 
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 1984maxresident)k 
0inputs+0outputs (0major+158minor)pagefaults 0swaps 
0

Hãy thử:

command 2> log.txt 

và đầu ra theo thời gian thực từ "lệnh" có thể được nhìn thấy trong một cửa sổ giao diện điều khiển với:

tail -f log.txt 
Các vấn đề liên quan