2008-10-14 27 views
10

Tôi đang cố gắng để nắm bắt đầu ra từ một kịch bản cài đặt (có sử dụng scp) và đăng nhập nó. Tuy nhiên, tôi không nhận được tất cả mọi thứ mà scp được in ra, cụ thể là, thanh tiến trình.Làm thế nào để nắm bắt tốt nhất và đăng nhập đầu ra scp?

đầu ra

màn hình:

sao chép /user2/cdb/xây dựng/tmp/UAT/myfiles/* để máy chủ/người dùng/myfiles như cdb

mật khẩu cdb @ máy chủ: myfile 100 % | ***************************** | 2503 00:00

dữ liệu ghi nhận:

sao chép /user2/cdb/xây dựng/tmp/UAT/myfiles/* để máy chủ/người dùng/myfiles như cdb

Tôi thực sự muốn biết rằng tập tin của tôi đã có. Dưới đây là những gì tôi đang cố gắng hiện không có sẵn:

myscript.sh 2> & 1 | tee mylogfile.log

Có ai có cách tốt để nắm bắt đầu ra scp và đăng nhập không?

Cảm ơn.

Trả lời

7

Có vẻ như bạn đã bỏ lỡ liệu scp có thành công hay không từ nhật ký.

Tôi đoán thanh cuộn không in được stdout và sử dụng ncurses hoặc một số loại TUI khác?

Bạn chỉ có thể xem giá trị trả lại của scp để xem liệu nó có thành công hay không. Giống như

scp myfile [email protected]:. && echo success! 

man scp nói

scp exits with 0 on success or >0 if an error occurred. 
1

Có thể bạn có thể sử dụng 'script' để đăng nhập phiên đầu cuối.

0

yes i thời gian gần đây đã cố gắng để có được đầu ra trong một kịch bản php từ proc_open() tôi mất đi một một thời gian yên tĩnh cố gắng để có được đầu ra :-) nhưng nó một chút muộn ở đây và tôi sau đó đọc bài đăng này ở đây làm cho tôi nhận ra rằng tôi không thực sự cần đầu ra junky này cho tập lệnh của tôi

chỉ là mã thoát sẽ thực hiện công việc :-)

$ exit_code = proc_close ($ process);

20

scp in thanh tiến trình của nó tới thiết bị đầu cuối bằng mã kiểm soát. Nó sẽ phát hiện nếu bạn chuyển hướng đầu ra và do đó bỏ qua thanh tiến trình.

Bạn có thể khắc phục điều đó bằng cách lừa scp vào suy nghĩ nó chạy trong một thiết bị đầu cuối sử dụng "kịch bản" lệnh đó được cài đặt trên hầu hết các distro theo mặc định:

script -q -c "scp server:/file /tmp/" > /tmp/test.txt 

Nội dung của test.txt sẽ là:

file 0% 0  0.0KB/s --:-- ETA 
file 18% 11MB 11.2MB/s 00:04 ETA 
file 36% 22MB 11.2MB/s 00:03 ETA 
file 54% 34MB 11.2MB/s 00:02 ETA 
file 73% 45MB 11.2MB/s 00:01 ETA 
file 91% 56MB 11.2MB/s 00:00 ETA 
file 100% 61MB 10.2MB/s 00:06 

... có lẽ là những gì bạn muốn.

Tôi tình cờ gặp vấn đề này trong khi chuyển hướng đầu ra của tập lệnh tương tác vào tệp nhật ký. Không có kết quả trong nhật ký không phải là vấn đề vì bạn luôn có thể đánh giá các mã thoát. Nhưng tôi thực sự muốn người dùng tương tác nhìn thấy thanh tiến trình. Câu trả lời này giải quyết cả hai vấn đề.

+0

Hãy coi chừng: bạn có thể muốn sử dụng tùy chọn '--return' (' -r') cho 'script', nếu nó có sẵn, vì vậy mã trả về của tiến trình con sẽ được giữ nguyên. Nếu không, ngay cả khi lệnh không thành công, lệnh 'script' của bạn sẽ vui vẻ trả lại mã thành công. – jwd

1
scp myfile [email protected]:. && echo success! 

là rất hữu ích nhưng để viết thông điệp vào một tập tin log Tôi đã thay đổi nó như thế này

scp myfile [email protected]:. && echo myfile successfully copied! >> logfile 2>&1 

và điều này sẽ viết "myfile sao chép thành công!" thông báo cho tệp nhật ký.

0

Hãy thử:

scp server:/file /tmp/ > /dev/tty 
+0

Việc thêm giải thích về câu trả lời này sẽ là một ý tưởng hay. (Nó cũng tấn công tôi như không có khả năng để có được đầu ra cho tập tin đăng nhập của mình.) –

0

Tôi không thể bình luận nào :(vì vậy tôi sẽ thêm một bản cập nhật ở đây ...

@ Martin đã có giải pháp tốt nhất đối với tôi mặc dù nếu lệnh scp của bạn là giữa chừng thông qua kịch bản của bạn thì đó là đầu ra thể xuất hiện sau khi lệnh mà thực sự chạy sau đó.

tôi nghĩ rằng đó là bởi vì kịch bản phải chạy lệnh trong một subshell nhưng tôi chưa thử nghiệm.

EDIT: nó thực sự đẻ trứng một vỏ vì vậy nếu bạn cần những thứ để chạy (và thực sự thất bại) một cách tuần tự (như trong một kịch bản xây dựng) thì bạn sẽ phải thêm một số logic xung quanh việc sử dụng lệnh script.

ví dụ:

kịch bản -q -c "lệnh của bạn" & & ngủ 1

hoặc một cái gì đó tương tự để phụ huynh chờ đợi shell của bạn cho vỏ con để kết thúc trước khi chuyển.

+0

script -qc 'ngủ 10' khối thực hiện trên hệ thống của tôi trong khi echo | script -qc 'sleep 10' thì không.Cách giải quyết: echo | kịch bản -qc 'ngủ 10' | con mèo. Tôi nghĩ rằng các khối shell miễn là stdin/err/out vẫn mở. – Martin

0
$ grep -r "Error" xyz.out > abc.txt 

Ở đây trong lệnh trên, tôi lưu trữ đầu ra vào tệp abc.txt.

Lệnh này grep là để tìm kiếm văn bản có chứa có Lỗi trong tập tin xyz.out và lưu trữ kết quả trong abc.txt mà không hiển thị trên giao diện điều khiển.

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