Tiền tố cho mỗi đầu ra của một lệnh trong thời gian chạy


16

Tôi đang cố gắng để tạo ra một kịch bản mô-đun. Tôi có một số tập lệnh / lệnh được gọi từ một tập lệnh.
Tôi muốn tiền tố đầu ra của mỗi lệnh riêng biệt.

Kiểm tra:

Các tệp của tôi là allcommands.sh / lệnh1.sh / lệnh2.sh

đầu ra lệnh1.sh
file exists
file moved

đầu ra lệnh2.sh
file copied
file emptied

allcommands.sh chạy các kịch bản command1.shcommand2.sh

Tôi muốn tiền tố mỗi đầu ra của hai tập lệnh như thế này:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied


Hãy thử chạy từng lệnh dẫn nó quased "s/\^/command1 /"
j_kubik

Hãy cho tôi một ví dụ với thông tin mà tôi cung cấp. Tôi không thực sự hiểu sedchức năng. Tôi xin lỗi.
Ivan Dokov 23/07/13

Câu trả lời:


21

Tôi giả sử rằng những gì bạn đang làm trong allcommands.sh là:

command1.sh
command2.sh

Chỉ cần đặt lại nó với

command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"

9

Một ví dụ tối thiểu về allcommands.sh:

#!/bin/bash
for i in command{1,2}.sh; do
    ./"$i" | sed 's/^/['"${i%.sh}"'] /'
done

Với command1.shcommand2.shthực thi và trong cùng một thư mục chỉ cần nhập echocác chuỗi mong muốn, điều này mang lại đầu ra shell:

$ ./command1.sh 
file exists
file moved
$ ./command2.sh 
file copied
file emptied
$ ./allcommands.sh 
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

sedSự cố nhanh

sed 's/^/['"${i%.sh}"'] /'
  • s/ vào chế độ "khớp mẫu regrec và thay thế"
  • ^/ có nghĩa là "khớp với đầu của mỗi dòng"
  • ${i%.sh}xảy ra trong bối cảnh shell và có nghĩa là " $i, nhưng tước hậu tố .sh"
  • ['"${i%.sh}"'] /lúc đầu in a [, sau đó thoát khỏi bối cảnh được trích dẫn để lấy $ibiến từ vỏ, sau đó nhập lại để kết thúc với dấu cách ]và dấu cách.

Cảm ơn đã làm rõ. Câu trả lời của bạn thực sự hữu ích, nhưng ví dụ của @ j_kubik chỉ là câu tôi cần.
Ivan Dokov
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.