在bin / sh脚本中使用时,scp命令失败并出现语法错误

时间:2019-07-28 17:17:45

标签: bash syntax sh glob

当直接从终端调用时,以下命令可以完美工作

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

1 个答案:

答案 0 :(得分:2)

!(node_modules|public)扩展为globbing syntax。您应该做两件事。

  1. 将shebang行更改为#!/bin/bash,以确保您的脚本由bash运行。
  2. 在顶部附近放置shopt -s extglob,以启用扩展的全局语法。

如果它可以交互工作,则可能是因为其中一个外壳初始化文件(例如~/.bashrc)中有shopt -s extglob

相关问题