完全なコンテキストコード行:
if ! strstr "\`cat /proc/cmdline\`" rd.live.image || [ "\$1" != "start" ]; then
exit 0
fi
ステスターとして定義された:
strstr() {
[ "${1#*$2*}" = "$1" ] && return 1
return 0
}
追加情報:コード:fedora-live-base.ks。 Fedoraが提供するデフォルトのkickstarterファイル。 ksファイルのほとんどの機能を理解しようとしています。ファイルの多くのスクリプト部分が原因で問題が発生しています。
答え1
strstr() {
[ "${1#*$2*}" = "$1" ] && return 1
return 0
}
command1 && command2
とにかく()が実行されcommand1
、[ "${1#*$2*}" = "$1" ]
〜しない限り command1
返品0
(&&
)がcommand2
(return 1
)を実行します。
return n
aが関数内で実行されると、その時点で関数の実行が停止して返されます。n
したがって、返された場合は返し、それ以外の場合はstrstr
返します。1
[ "${1#*$2*}" = "$1" ]
0
0
[
"test" 組み込み関数の同義語です。
[ str1 = str2 ]
0
文字列が等しいかどうかを返します。
$1
に渡された最初のパラメータstrstr
、$2
2番目のパラメータ"${1#*$2*}"
、シェルパラメータ拡張の$1
:
${パラメータ#単語}パターンがパラメータ拡張値の先頭に一致する場合、拡張結果は、最短一致パターン(「#」の場合)または最長一致パターン(「##」の場合)を持つパラメータ拡張値になります。削除されました。
$1
したがって、これは最も短い一致で拡張されます*$2*
(<これはパターンマッチング)、削除されました。この拡張値は合計値です$1
(これはただ〜したい$1
含まれていることを確認する方法$2
)。
さて、今$1
andとは何ですか$2
?
$2
とてもシンプルrd.live.image
で
$1
ファイルの内容です。/proc/cmdline
/proc/cmdline
:このファイルは、起動時にカーネルに渡されたパラメータを示しています。
それから最後に:
strstr "`cat /proc/cmdline`" rd.live.imageは何をしますか?
rd.live.image
起動時にカーネルに渡された引数に含まれることを確認してください。この場合はが返され0
、そうでなければが返されます1
。