[ -s "$NVM_DIR/nvm.sh" ] && コマンドは何ですか? 「$NVM_DIR/nvm.sh」がすること

[ -s "$NVM_DIR/nvm.sh" ] && コマンドは何ですか? 「$NVM_DIR/nvm.sh」がすること

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 && cmd2ANDがすべて成功すれば成功するというのが「AND」演算子の概念cmd1です。cmd2

ここで、cmd1は[コマンド(テストの実行に使用されます)、cmd2はコマンド.(指定されたファイルに含まれるコードを評価するようにシェルに指示するために使用されます)です。

この[コマンドは、ファイルサイズがゼロでないことを-s file確認しますfile(そうであれば成功を返します)。

したがって、コマンドラインの意味は次のとおりです。$NVM_DIR/nvm.shファイルが空でない場合は、ファイルのコードを解釈してください。

空の場合、.コマンドは何もしないので問題はありません。このテストは[コマンドも返すので、まだ便利です。間違ったファイルが存在しない場合。 Bourneに似たシェル(bashPOSIX準拠モードでない場合)でそれを行うと、シェルは. a-file-that-does-not-exist終了します(bashエラーメッセージが表示されることもあります)。

したがって、ファイルが存在するという保証がない場合(なしでも構いません)、あらかじめファイルを確認してみることをお勧めし、これも[ -s file ]一つの方法です。.また、ファイルが空の場合、コマンドをスキップできるという利点もあります。

これも[ -s file ]返されます。本物/成功file空でなく、通常のファイル(ディレクトリなど)でない場合でも、コマンドは.失敗します。別のアプローチは、[ -f file ]テストが存在することであり得る。file一般的なファイルです(または一般ファイルへのシンボリックリンク)。これは、非伝統的なファイル(fifoなど)を使用できなくなり、ファイルがディレクトリの場合はエラーメッセージを出力する方が良いと主張する可能性があります。

別の方法は、ファイルが[ -r file ]存在し、読み取ることができることを確認することです。ただし、そうでない場合は、問題が何であるかを知らせるエラーメッセージを好むことがあります。

[ -e file ]また、ファイルが存在するか(空であるか、一般であるか、読み取ることができるか、存在しないか)確認するだけです。

関連情報