実行時のコマンドの各出力のプレフィックス


16

モジュラースクリプトを作成しようとしています。単一のスクリプトから呼び出されるスクリプト/コマンドがいくつかあります。
各コマンドの出力にプレフィックスを付けたい。

例:

私のファイルはすべてcommands.sh / command1.sh / command2.shです

command1.shの出力
file exists
file moved

command2.shの出力
file copied
file emptied

allcommands.shは、スクリプトcommand1.shおよびcommand2.shを実行します

これらの2つのスクリプトの各出力のプレフィックスを次のようにします。
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied


各コマンドをパイピングして実行してみてくださいsed "s/\^/command1 /"
j_kubik

私が提供する情報を使って例を挙げてください。私は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望んでいた文字列をINGの、これはシェルの出力が得られます:

$ ./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}"'] /最初にaを出力し[、引用されたコンテキストを終了$iしてシェルから変数を取得し、再入力し]てスペースとスペースで終了します。

説明をありがとう。あなたの答えは確かに役に立ちましたが、@ j_kubikの例は私が必要とするものに過ぎませんでした。
イヴァンドコフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.