0

次の行に遭遇したbashスクリプトの1つを読んでいました。これらの次の行が何をしているのか正確に推測できませんでした? これらの行が正確に何をしているのかについて、誰かヒントを教えてください。これらの行を個別に実行しましたが、出力はありません。ブレークポイントも使ってみました。

ssh $HOST bash -e <<
'END' 2>&1 |
 /usr/bin/perl -ne
 'BEGIN { $|=1 } ; 

if (/(bmake|create_dirs\.sh)\[\d+\] Leaving/)
 { --$indent };
 print " "x($indent * 4), "$_" ;
 if (/(bmake|create_dirs\.sh)\[\d+\] Entering/) { ++$indent }'

私はどんな親切な反応も楽しみにしています。

ありがとう

4

1 に答える 1

3

ID を追跡するためのスクリプトです。「Leaving」行ではインデントが減少し、「Entering」行ではインデントが増加します。次に、インデント変数に基づいて、スペースが出力されることがわかります。詳細に:

/usr/bin/perl -ne

-nflag はwhile(<>)スクリプトの周りにループを配置します。これにより、基本的に perl は stdin または引数ファイルから読み込まれます。

BEGIN { $|=1 }

自動フラッシュがオンになっています。

if (/(bmake|create_dirs\.sh)\[\d+\] Leaving/) { --$indent };

この正規表現は、次のような行を探します

bmake[9] Leaving
create_dirs.sh[2] Leaving

見つかった場合、$indent変数は 1 減ります。

print " "x($indent * 4), "$_" ;

これは、スペースを 4 *$indent回繰り返し、その後に入力行を出力します。

if (/(bmake|create_dirs\.sh)\[\d+\] Entering/) { ++$indent }

この行は、上記と同じ方法でインデントを増やします。

正規表現に関する詳細な説明 (こちらを参照してください。ただし、このサイトから構文をクリーンアップしました):

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (                        group and capture to $1:
--------------------------------------------------------------------------------
    bmake                  literal string 'bmake'
--------------------------------------------------------------------------------
   |                       OR
--------------------------------------------------------------------------------
    create_dirs\.sh        literal string 'create_dirs.sh'
--------------------------------------------------------------------------------
  )                        end of $1
--------------------------------------------------------------------------------
  \[                       literal string '['
--------------------------------------------------------------------------------
  \d+                      digits (0-9) (1 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  \] Leaving               literal string '] Leaving'
于 2013-02-20T12:53:08.220 に答える