-r ファイル名&& .ファイル名

-r ファイル名&& .ファイル名

私はスクリプト作業をしていましたが、この行を見つけました。誰でもこの行が何をしているのか教えてもらえますか?これはコード行です。

[ -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"

zshsh(上記の構成は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)"

おすすめ記事