シェルはsshを使用してファイルが1行に存在することを確認し、cdとnpmのインストール

シェルはsshを使用してファイルが1行に存在することを確認し、cdとnpmのインストール

私のスクリプトには次の行があります。

ipserver=1.1.1.1
fullpathfile="/var/www/html/mysite"
ssh "root@${ipserver}" "[[ -d ${fullpathfile}/node_modules ]] echo "Directory exist" ||  cd ${fullpathfile} && npm install "

ただし、次のエラーが発生します。

Unexpected remote arg: [email protected]:/var/www/html/mysite/\#012ssh [email protected] [[

SSH経由で接続し、フォルダがあるかどうか(node_module)を確認し、そうでない場合は次のことをcd folder行う必要がありますnpm install

私は何が間違っていましたか?

答え1

[[(and[と)はtest他のコマンドと同じです。したがって、成功した場合にのみ実行できます&&echo[[

ssh "root@${ipserver}" "[[ -d ${fullpathfile}/node_modules ]] && echo "Directory exist" || cd ${fullpathfile} && npm install "

ただし、一連のコマンドを二重引用符で囲むとすぐに面倒になる可能性があります。具体的には、ディレクトリ名にスペースが含まれている場合、またはコマンドに引用符で囲まれた引数が必要な場合は特にそうです。

面倒なことを避けるために、必要なタスクを実行する小さなスクリプト(たとえば、「$ HOME / bin / do_npm_install.sh」)をサーバーにインストールし、sshを使用して呼び出すことをお勧めします。

ssh "root@${ipserver}" "bash ~/bin/do_npm_install.sh"

関連情報