Çalışma zamanında bir komutun her çıktısının öneki


16

Modüler bir senaryo yapmaya çalışıyorum. Tek bir komut dosyasından çağrılan birkaç komut dosyası / komut var.
Her ayrı komutun çıktısının önekini almak istiyorum.

Examle:

Dosyalarım allcommands.sh / command1.sh / command2.sh

command1.sh çıktıları
file exists
file moved

command2.sh çıkışları
file copied
file emptied

allcommands.sh komut çalıştırır command1.sh ve command2.sh

Bu iki komut dosyasının her çıktısının önekini şu şekilde eklemek istiyorum:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied


Her komutu piping aracılığıyla çalıştırmayı deneyinsed "s/\^/command1 /"
j_kubik

Bana verdiğim bilgilerle ilgili bir örnek verin. sedİşlevi gerçekten anlamıyorum . Üzgünüm.
Ivan Dokov

Yanıtlar:


21

Allcommands.sh dosyasında ne yaptığınızı varsayalım:

command1.sh
command2.sh

Sadece ile değiştirin

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

9

Minimal bir örnek allcommands.sh:

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

İle command1.shve command2.shçalıştırılabilir ve aynı dizinde sadece echoistenen dizeleri ing, bu kabuk çıktı verir:

$ ./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

Hızlı sedarıza

sed 's/^/['"${i%.sh}"'] /'
  • s/ "normal ifade eşleşmesi ve değiştir" moduna girer
  • ^/ "her satırın başlangıcıyla eşleş" anlamına gelir
  • ${i%.sh}kabuk bağlamında gerçekleşir ve " $iancak son eki kaldır .sh" anlamına gelir
  • ['"${i%.sh}"'] /önce a'yı yazdırır [, sonra $ideğişkeni kabuktan almak için alıntılanan bağlamdan çıkar , sonra ve ]ve boşlukla bitirmek için yeniden girer .

Açıklamalar için teşekkürler. Cevabınız gerçekten yardımcı oldu, ancak @ j_kubik'in örneği ihtiyacım olan tek şeydi.
Ivan Dokov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.