首页 > 解决方案 > 我有一些代码,其中有一个命令在终端上运行良好,但在从脚本运行时失败

问题描述

显示的脚本无法在最后一个命令处运行。

该命令在终端中单独运行时运行良好。我尝试将 !... 部分放在参数中,移动它,使用各种括号和换行符,甚至使用完整路径。我对替代解决方案不感兴趣 - 我感兴趣的是为什么这个解决方案不能专门在脚本中工作。

    #!/bin/bash
    mkdir alllogs
    for i in $(locate *.log); do cp $i alllogs/; done
    tar -zcvf alllogs/logs.gz alllogs/*
    rm -v alllogs/!('logs.gz') 

该脚本从 Linux 系统收集各种日志并将它们压缩成一个文件,之后它会擦除日志的副本,只留下压缩文件。但是,删除副本的命令在通过脚本运行时会失败,但在终端上可以正常工作。给出的错误是:

    ./x.sh: line 7: syntax error near unexpected token `('
    ./x.sh: line 7: `rm -v alllogs/!('logs.gz')'

标签: linuxbashterminal

解决方案


默认情况下不启用这种形式的模式匹配。您需要明确设置extglob.

shopt -s extglob

推荐阅读