linux - 我有一些代码,其中有一个命令在终端上运行良好,但在从脚本运行时失败
问题描述
显示的脚本无法在最后一个命令处运行。
该命令在终端中单独运行时运行良好。我尝试将 !... 部分放在参数中,移动它,使用各种括号和换行符,甚至使用完整路径。我对替代解决方案不感兴趣 - 我感兴趣的是为什么这个解决方案不能专门在脚本中工作。
#!/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')'
解决方案
默认情况下不启用这种形式的模式匹配。您需要明确设置extglob
.
shopt -s extglob
推荐阅读
- c++ - 是否可以在不知道成员名称的情况下检测一个类是否具有具有某种类型/返回类型的成员?
- javascript - 如何在有条件的数组中呈现布尔值
- r - 当需要多个 data.frame 的名称时,如何使用 tidyverse 动词进行 for 循环?
- logstash - 有什么方法可以在 logstash 端屏蔽包含敏感信息的日志事件的一部分?
- javascript - 使用不同的键将嵌套 JSON 转换为 JavaScript 中的节点和链接结构
- python - 我如何将这些日期行合并到月份?
- python - 使用openpyxl在excel工作表中打印python数据框时如何跳过默认数据框索引
- oracle - 如何将oracle客户端连接到virtualbox
- c# - 通过接口实例化子类时访问基类的方法
- ajax - 2021 年使用 ajax http 调用的第三方 Cookie 阻止问题(ITP 限制)?