查找命令在.sh中获取错误但在终端中没有

时间:2017-09-09 14:32:46

标签: bash

我有一个脚本在find命令中出错:

echo "find ${logPath} -mtime +${cutOffDays} -type f -name ${dateInNameLogs}.log -depth 1 -print -delete 2>&1" >>$logFile
rslt=$(find ${logPath} -mtime +${cutOffDays} -type f -name ${dateInNameLogs}.log -depth 1 -print -delete 2>&1)

日志文件显示:

find /Users/craig/Desktop/logs -mtime +21 -type f -name *[0-9][0-9][0-9][0-9][-_][0-9][0-9][-_][0-9][0-9].log -depth 1 -print -delete 2>&1
rslt = find: 1: unknown primary or operator

如果我复制显示的find命令并在终端执行,它可以正常工作。所以我的rslt = $(...行。

是错的

我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:3)

引用你的扩展:

rslt=$(find "${logPath}" \
  -mtime "+${cutOffDays}" \
  -type f \
  -name "${dateInNameLogs}.log" \
  -depth 1 \
  -print \
  -delete \
  2>&1)

引用"${dateInNameLogs}.log"(用双引号)告诉shell扩展变量,但不是以将结果扩展为glob(或通过单词拆分),从而确保该值由find评估,而不是由您的shell评估。

即使设置了nullglobfailglob或类似选项,这也会使行为变得健壮

答案 1 :(得分:0)

原来这是由&shop; -s nullglob'引起的。我的脚本做了不止一件事,我把它设置在文件的顶部。我已经将它移动到需要的位置,现在脚本运行正常。