gpt4 book ai didi

linux - 命令正在终端上运行,但在 bash 脚本中没有给出语法错误

转载 作者:行者123 更新时间:2023-12-04 18:55:21 26 4
gpt4 key购买 nike

下面是我放在/usr/bin 中的脚本,因为我想让它在全局范围内可用

#!/bin/bash
cd /app/data/zips
rm -rf -i -v !(*.zip)
cd /app/cronscripts/import
> import_output.log
nohup ./import.sh > import_output.log & disown

除了下面给出的行之外,上述脚本中的所有内容都运行良好,但是,当直接从终端运行该命令时,它运行良好。用于删除目录中除 .zip 文件之外的所有文件和文件夹
rm -rf -i -v !(*.zip)

每当我尝试运行此脚本时,都会出现以下错误。
/usr/bin/importdata.sh: line 3: syntax error near unexpected token `('
/usr/bin/importdata.sh: line 3: `rm -rf -i -v !(*.zip)'

我的哪个 bash 输出是:
/bin/bash

操作系统信息:
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic

最佳答案

bash , !(pattern)是扩展的全局模式。打开启用该功能的 shell 选项:

shopt -s extglob
shopt应该与您可能依赖的任何其他选项一起出现在脚本开头的单独行中。见毛边: https://mywiki.wooledge.org/glob#Options_which_change_globbing_behavior

extglob changes the way certain characters are parsed. It is necessary to have a newline (not just a semicolon) between shopt -s extglob and any subsequent commands to use it. You cannot enable extended globs inside a group command that uses them, because the entire block is parsed before the shopt is evaluated.

关于linux - 命令正在终端上运行,但在 bash 脚本中没有给出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62124140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com