/etc/profile
CentOSシステムでは、次のようなかわいいコードスニペットを見つけました。
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
私はそれが.sh
ファイルからロードされることを知っていますが、/etc/profile.d
最後のifステートメントについて混乱していますif [ "${-#*i}" != "$-" ]
。この構文の機能は何ですか?どこで探すべきかさえわかりません。
答え1
デフォルトでは、[ "${-#*i}" != "$-" ]
シェルが対話型であることを確認してください。
$-
シェルを実行するためのフラグが含まれています(たとえば、himBH
シェルi
が対話型であることを示します)。最初の部品の後に部品を製造します${-#*i}
(この場合)。ない場合は製作されます。$-
i
mBH
i
$-
${-#*i}
$-
これがまさにテストの目的です。 2つの文字列が異なる場合は存在i
することを意味します$-
。つまり、シェルが対話型であることを意味します。