誰かが以下のコードが何を意味するのか教えてもらえますか?
NAME=`basename $0`
unset ISBOOT
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
then
NAME=${NAME:3}
ISBOOT=1
fi
これはTomcat起動スクリプトにあります。この行は正確に何を意味しますか?
答え1
実行中のスクリプト($NAME)(パスなし)のファイル名が「S」または「K」で始まる場合:
- $NAMEの最初の3文字を切り取ります。
- $ ISBOOTを1に設定
これが実際に意味するものは誰でも推測できます。これらの変数に対して何をするのかを知るには、スクリプト自体を調べる必要があります。
スクリプトはおそらく/etc/rc?.d/の下のinit.dスクリプトなので、「S」と「K」が重要なようです。このスクリプトは、「S」で始まるシンボリックリンク名を使用して処理されます。実行レベルの開始(例:開始)では、「K」は、実行レベルが終了したとき(たとえば終了)スクリプトが開始されることを意味します。 S=スタート、K=終了。
シンボリックリンクの名前は通常「S05scriptname」と「K10scriptname」で指定されるため、ファイル名の最初の3文字が切り捨てられます。注文するスクリプトが実行されます。そのため、「S01foo」は「S99bar」より先に実行されます。
したがって、最も重要なのは、sysv rcスクリプトの命名なしでスクリプト名を取得することです。
それはおそらく名前によって異なるタスクを実行するスクリプトだからです。
もう一度スクリプトを確認して、名前と ISBOOT==1 に基づいて実行される操作を確認する必要があります。
答え2
このスクリプトは/etc/init.dにコピーし、/etc/rc.dディレクトリのサブフォルダの1つにソフトリンクできます。通常は2回接続されます。最初はS
リンク名の最初の文字として ""を使用し、2番目はK
リンク名の最初の文字を ""として使用します。名前で始まるリンクはS
開始時に実行され、名前で始まるリンクは終了K
時に実行されます。最初の文字の後の2桁の数字は、すべての開始スクリプトまたはすべての終了スクリプトが実行される順序を決定します。 SリンクとKリンクの両方が同じスクリプトにリンクされるのが一般的です。あなたが要求するスクリプトの部分は、デフォルトで起動または終了時間スクリプトとして実行されていることを確認することです。また、インタラクティブに実行され、それに応じて動作することもできます。
NAME=`basename $0`
NAME
この行はスクリプト(またはこの場合はリンク)の名前を取得し、変数に書き込みます。
unset ISBOOT
この行はISBOOT
変数のすべての値を設定解除します。
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
NAME
この行は、変数値の最初の文字があるS
かどうかを確認しますK
。
then
NAME=${NAME:3}
ISBOOT=1
fi
これが真の場合は、名前の最初の3文字(S
または文字と2桁)を切り捨て、変数を値 ""に設定します。K
ISBOOT
1