私はスクリプト作業をしていましたが、この行を見つけました。誰でもこの行が何をしているのか教えてもらえますか?これはコード行です。
[ -r "$PosConfigDir/posconfig.sh" ] && . "$PosConfigDir/posconfig.sh"
答え1
シンボリックリンクが解決された後にr
ファイルを読み取る権限があることを確認してください。$PosConfigDir/posconfig.sh
源泉そのファイル。
ファイルを読み取ることができるという保証はありません。たとえば、ほとんどのシステムでは[ -r / ]
trueが返されますが、読む /
。
-r
は標準テスト演算子。
.
引数として与えられたファイルのコードを読み、解釈するようにシェルに指示する Bourne 様シェルの特別な組み込みコマンドです。source
は対応するコマンドですcsh
。多くの現代Bourne型シェルはsource
これを.
。
.
一部のシェル実装では、ファイルを開いたり読み込めなかったりすると、シェルがハングします(エラーメッセージの印刷後)。この-r
チェックは、おそらくこのようなことが発生するのを防ぐためのものです。
シェルがハングするのを防ぐために、POSIXシェルの代替案は次のとおりです。
command . "$PosConfigDir/posconfig.sh"
zsh
sh
(上記の構成はinやエミュレーションを除いては動作しませんがksh
)
エラーメッセージを回避するには、stderr出力をstderrにリダイレクトする必要があります/dev/null
が、これはコマンドからエラーを取り除く不要な副作用がありますpostconfig.sh
。
一例:
$ [ -r /etc/os-release ] && . /etc/os-release
$ printf '%s\n' "$PRETTY_NAME"
Debian GNU/Linux 8 (jessie)
PRETTY_NAME
/etc/os-release
ファイルで定義されています。
$ head -n 1 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"