モジュラースクリプトを作成しようとしています。単一のスクリプトから呼び出されるいくつかのスクリプト/コマンドがあります。
各個別のコマンドの出力にプレフィックスを付けたいです。
例:
私のファイルはallcommands.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
Allcommands.shで何をしていると思います:
command1.sh
command2.sh
とそれをリレースするだけ
command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"
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}"'] /
は、最初に[
を出力し、引用符で囲まれたコンテキストを終了してシェルから$i
変数を取得し、再度入力して]
とスペースで終了します。