首页 > 解决方案 > 未从另一个脚本执行的 Unix shell 脚本

问题描述

我使用 shell 脚本编写了以下命令:

/usr/bin/find ${FilePath[$i]} -name ${FileName[$i]}* -type f -mtime +${DaysNo[$i]} | grep ${FilePath[$i]}$tempfile > tempFilesList

当我直接执行这个脚本时它看起来不错,但是当我尝试从另一个shell 脚本执行它时给我下面的错误。

ERROR : /usr/bin/find: bad option resultmgr.log_2019-11-07
/usr/bin/find: [-H | -L] path-list predicate-list

标签: shellunixsh

解决方案


很可能${FileName[$i]}*正在扩展为多个文件名,这会给您类似-name file1 file2命令的内容。

例如,如果与该掩码匹配的文件存在于您从另一个脚本运行它的情况下,而不是当您从命令行运行它时,则可能会发生这种情况。根据以下记录,如果可能,一些 shell 会扩展,但如果没有,则不要理会:

~> echo testprog*
testprog testprog.c
~> echo nosuchfile*
nosuchfile*
~> _

file2将被视为一个控制参数find,因此无效。

您可以通过在运行之前简单地回显命令来检查它:

echo Will run: /usr/bin/find ${FilePath[$i]} -name ${FileName[$i]}* -type f -mtime +${DaysNo[$i]} ...

并查看它的输出。


推荐阅读