Abd*_*oiz 0 linux bash shell ubuntu sh
下面是我放在 /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
Run Code Online (Sandbox Code Playgroud)
除了下面给定的行之外,上面脚本中的所有内容都运行良好,但是,当直接从终端运行该命令时,它运行良好。用于删除目录中除 .zip 文件外的所有文件和文件夹
rm -rf -i -v !(*.zip)
Run Code Online (Sandbox Code Playgroud)
每当我尝试运行此脚本时,它都会给我以下错误。
/usr/bin/importdata.sh: line 3: syntax error near unexpected token `('
/usr/bin/importdata.sh: line 3: `rm -rf -i -v !(*.zip)'
Run Code Online (Sandbox Code Playgroud)
我的哪个 bash 输出是:
/bin/bash
Run Code Online (Sandbox Code Playgroud)
操作系统信息:
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
Run Code Online (Sandbox Code Playgroud)
小智 5
在bash,!(pattern)是一个扩展的 glob 模式。打开 shell 选项,它启用:
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
shopt应该出现在脚本开头的单独一行中,以及您可能依赖的任何其他选项。见羊毛:https : //mywiki.wooledge.org/glob#Options_which_change_globbing_behavior
extglob改变某些字符的解析方式。shopt -s extglob在使用它的任何后续命令之间必须有一个换行符(不仅仅是分号)。您不能启用一组命令使用它们,因为整个块之前解析内部扩展水珠shopt被评估。