16

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

нелогич-:

Мои файлы: allcommands.sh / command1.sh / command2.sh

выходы command1.sh
file exists
file moved

выходы command2.sh
file copied
file emptied

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

Я хочу префикс каждого вывода этих двух сценариев, как это:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

2 ответа2

19

Я предполагаю, что вы делаете в allcommands.sh:

command1.sh
command2.sh

Просто соотнесите это с

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

Минимальный пример 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/ входит в режим регулярного выражения сопоставления и замены
  • ^/ означает "соответствовать началу каждой строки"
  • ${i%.sh} происходит в контексте оболочки и означает « $i , но удалите суффикс .sh »
  • ['"${i%.sh}"'] / сначала печатает [ , затем выходит из указанного в кавычках контекста, чтобы получить переменную $i из оболочки, а затем снова входит, чтобы завершить символ ] и пробел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .