Awalan untuk setiap output dari perintah saat runtime

16

Saya mencoba membuat skrip modular. Saya memiliki beberapa skrip / perintah yang dipanggil dari satu skrip.
Saya ingin awalan output dari setiap perintah yang terpisah.

Memeriksa:

File saya adalah allcommands.sh / command1.sh / command2.sh

output command1.sh
file exists
file moved

output command2.sh
file copied
file emptied

allcommands.sh menjalankan skrip command1.sh dan command2.sh

Saya ingin mengawali setiap output dari dua skrip ini seperti ini:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

Ivan Dokov
sumber
Coba jalankan setiap perintah yang di-pipe melaluised "s/\^/command1 /"
j_kubik
Tolong beri saya contoh dengan informasi yang saya berikan. Saya tidak begitu mengerti sedfungsinya. Maafkan saya.
Ivan Dokov

Jawaban:

21

Saya berasumsi bahwa apa yang Anda lakukan di allcommands.sh Anda adalah:

command1.sh
command2.sh

Relace saja dengan

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

Contoh minimal allcommands.sh:

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

Dengan command1.shdan command2.shdapat dieksekusi dan dalam direktori yang sama hanya echodengan string yang diinginkan, ini memberikan output 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

sedKerusakan cepat

sed 's/^/['"${i%.sh}"'] /'
  • s/ memasuki mode "regexp pattern match and replace"
  • ^/ berarti "cocok dengan awal setiap baris"
  • ${i%.sh}terjadi dalam konteks shell dan berarti " $i, tetapi menghapus akhiran .sh"
  • ['"${i%.sh}"'] /pada awalnya mencetak a [, kemudian keluar dari konteks yang dikutip untuk mengambil $ivariabel dari shell, kemudian masuk kembali untuk menyelesaikan dengan ]dan spasi.
Daniel Andersson
sumber
Terima kasih atas klarifikasi. Jawaban Anda memang sangat membantu, tetapi contoh @ j_kubik adalah yang saya butuhkan.
Ivan Dokov