当直接从终端调用时,以下命令可以完美工作
scp -r ./!(node_modules|public) $SERVER:$WEBSITE_SRC
但是将相同的命令添加到Shell脚本后,它将失败,并显示以下错误
line 9: syntax error near unexpected token `('
以下是供参考的脚本:
#!/bin/sh
set -e
SERVER=127.0.0.1
WEBSITE_SRC=~/website/src
echo "Deploying changes to the website src code"
scp ./.env* $SERVER:$WEBSITE_SRC
scp -r ./!(node_modules|public) $SERVER:$WEBSITE_SRC
答案 0 :(得分:2)
!(node_modules|public)
扩展为globbing syntax。您应该做两件事。
#!/bin/bash
,以确保您的脚本由bash运行。shopt -s extglob
,以启用扩展的全局语法。如果它可以交互工作,则可能是因为其中一个外壳初始化文件(例如~/.bashrc
)中有shopt -s extglob
。