显示脚本无法在最后一条命令上运行。
在终端中单独运行时,该命令运行正常。我尝试将!...部分放入参数中,使用各种括号和换行符甚至使用完整路径将其移动。我对替代解决方案不感兴趣-我对为什么该解决方案不能在脚本中特别有效感到兴趣。
#!/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')'
答案 0 :(得分:0)
默认情况下未启用pattern matching形式。您需要明确设置extglob
。
shopt -s extglob
答案 1 :(得分:0)
葡萄酒商人所说的话,或取代
$(locate *.log)
与
`locate *.log`