nvmを介してノードをインストールするとき、.profileファイルで次のコマンドが見つかりました。
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[]
次のコマンドで中和の目的が何であるかを知りたいです。&&
以前このコマンド構文に触れたことはありません。次のコマンドの機能とこの構文の名前を知りたいです。私の考えでは、ソフトリンクを生成するようです。そうですか?
編集する:nvm.sh は実行ファイルではありません。
答え1
[
テスト構造は次のとおりです。
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
これは-s
利用可能なテストの1つで、ファイルが存在し、空でない場合はtrueを返します。
$ help test | grep -- -s
-s FILE True if file exists and is not empty.
&&
ANDですオペレーター。右側のコマンドは、左側のコマンドが成功した場合にのみ実行されます。
最後に、この.
コマンドは、source
同じシェルセッション内のソースファイル内のすべてのコードを評価するようにシェルに指示します。
$ help .
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
したがって、実行したコマンドは次のようになります。
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
## Source it
. "$NVM_DIR/nvm.sh"
fi
答え2
cmd1 && cmd2
cmd1 が成功した場合にのみ cmd2 を実行します。cmd1 && cmd2
ANDがすべて成功すれば成功するというのが「AND」演算子の概念cmd1
です。cmd2
ここで、cmd1は[
コマンド(テストの実行に使用されます)、cmd2はコマンド.
(指定されたファイルに含まれるコードを評価するようにシェルに指示するために使用されます)です。
この[
コマンドは、ファイルサイズがゼロでないことを-s file
確認しますfile
(そうであれば成功を返します)。
したがって、コマンドラインの意味は次のとおりです。$NVM_DIR/nvm.sh
ファイルが空でない場合は、ファイルのコードを解釈してください。。
空の場合、.
コマンドは何もしないので問題はありません。このテストは[
コマンドも返すので、まだ便利です。間違ったファイルが存在しない場合。 Bourneに似たシェル(bash
POSIX準拠モードでない場合)でそれを行うと、シェルは. a-file-that-does-not-exist
終了します(bash
エラーメッセージが表示されることもあります)。
したがって、ファイルが存在するという保証がない場合(なしでも構いません)、あらかじめファイルを確認してみることをお勧めし、これも[ -s file ]
一つの方法です。.
また、ファイルが空の場合、コマンドをスキップできるという利点もあります。
これも[ -s file ]
返されます。本物/成功file
空でなく、通常のファイル(ディレクトリなど)でない場合でも、コマンドは.
失敗します。別のアプローチは、[ -f file ]
テストが存在することであり得る。file
一般的なファイルです(または一般ファイルへのシンボリックリンク)。これは、非伝統的なファイル(fifoなど)を使用できなくなり、ファイルがディレクトリの場合はエラーメッセージを出力する方が良いと主張する可能性があります。
別の方法は、ファイルが[ -r file ]
存在し、読み取ることができることを確認することです。ただし、そうでない場合は、問題が何であるかを知らせるエラーメッセージを好むことがあります。
[ -e file ]
また、ファイルが存在するか(空であるか、一般であるか、読み取ることができるか、存在しないか)確認するだけです。