わかりました…小さな基本的な質問ですが、「-S」が何をテストしているのかわかりませんか?
BORG_SOCKET="${BORG_SOCKET:-/run/borg.sock}"
if ! [[ -S $BORG_SOCKET ]]; then
echo "err: borg socket does not exist" >&2
exit 10
...
答え1
[[...]]
シェル構造です。[[
、および]]
はシェル構文の予約語です。ここでは、シェルは次のマイクロ言語形式を理解しています。条件式。
[
この言語は、ユーティリティに渡された引数で構成される言語に似ていますが、いくつかの微妙な点で異なりますtest
。
シェルのマニュアルでその文書を見つけることができます。この[[...]]
構成はもともとKornシェルから来ており、bashとzshによってコピーされましたが、2つの間に違いがあります。
については、bash
以下を参照してください。条件付き構造節以下により、システムにインストールされたバージョンの構成を取得できます。
info -n 'conditional constructs' bash
ここでは、[[...]]
オペレータについて説明し、次のリンクを見つけることができます。Bash条件式節内部理解のミッシュ言語を説明します。または、次の方法でノードに直接アクセスできます。
info -n 'Bash Conditional Expressions' bash
そこには次のものがあります。
-S文書
もし本当だ文書存在し、ソケットです。
する:
echo "err: borg socket does not exist" >&2
少し誤解を招く可能性がありますが、次のようにする必要があります。
echo "err: borg socket does not exist or is not a socket" >&2
厳密に言えば、次のようになります。
echo "err: borg socket does not exist or I can't determine whether it's a socket or not" >&2
答え2
からman test
:
-S FILE ファイルが存在し、ソケットです。
答え3
-S
与えられたパスが存在し、ソケットかどうかをテストします。(リンクされたファイルtest
ですが、[[
-S
演算子は同じ意味を持ちます。)上記は!
テストのポイントを否定します。