Префікс до кожного виходу команди під час виконання


16

Я намагаюся зробити модульний сценарій. У мене є кілька скриптів / команд, які викликаються з одного сценарію.
Я хочу встановити вивід кожної окремої команди.

Приклад:

Мої файли - це allcommands.sh / command1.sh / command2.sh

команда1.sh виводить
file exists
file moved

команда2.sh виводить
file copied
file emptied

allcommands.sh запускає сценарії command1.sh та command2.sh

Я хочу встановити префікс кожного виводу цих двох сценаріїв на кшталт цього:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied


Спробуйте запустити кожну команду, sed "s/\^/command1 /"
провівши

Наведіть, будь ласка, приклад із інформацією, яку я даю. Я не дуже розумію sedфункціональність. Мені шкода.
Іван Доков

Відповіді:


21

Я припускаю, що те, що ти робиш у своєму allcommands.sh:

command1.sh
command2.sh

Просто зв’яжіть це

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

9

Мінімальний приклад allcommands.sh:

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

З command1.shі command2.shвиконуваним, і в тому самому каталозі, що лише echoшукає рядки, це дає вихід оболонки:

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

Швидка sedполомка

sed 's/^/['"${i%.sh}"'] /'
  • s/ переходить у режим "збігання і замінення шаблону regexp"
  • ^/ означає "відповідати початку кожного рядка"
  • ${i%.sh}трапляється в контексті оболонки і означає " $i, але зніміть суфікс .sh"
  • ['"${i%.sh}"'] /спочатку друкує a [, потім виходить з цитованого контексту, щоб схопити $iзмінну з оболонки, потім знову вводиться, щоб закінчити з ]пробілом.

Дякую за роз’яснення Ваша відповідь справді була корисною, але приклад @ j_kubik був саме тим, що мені потрібно.
Іван Доков
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.