我有一些代码,其中的一个命令可以在终端上正常运行,但是从脚本运行时失败

时间:2019-07-02 09:34:35

标签: linux bash terminal

显示脚本无法在最后一条命令上运行。

在终端中单独运行时,该命令运行正常。我尝试将!...部分放入参数中,使用各种括号和换行符甚至使用完整路径将其移动。我对替代解决方案不感兴趣-我对为什么该解决方案不能在脚本中特别有效感到兴趣。

    #!/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')'

2 个答案:

答案 0 :(得分:0)

默认情况下未启用pattern matching形式。您需要明确设置extglob

shopt -s extglob

答案 1 :(得分:0)

葡萄酒商人所说的话,或取代

$(locate *.log) 

`locate *.log`