shell 使用 ssh 检查文件是否存在于一行,然后 cd 和 npm install

shell 使用 ssh 检查文件是否存在于一行,然后 cd 和 npm install

我的脚本中有这些行:

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

相关内容