【发布时间】:2012-12-20 10:35:51
【问题描述】:
当我在命令行中准确键入时,以下内容可以正常工作:
find /<some_path>/{epson,epson_laser,epson_inkjet} -iname "*.ppd"
-exec grep "\*ModelName\:" {} \; | sed 's/.*\"\(.*\)\"/\1/'
但是,当我尝试从
bash 脚本我得到find: missing argument to -exec'。
我还尝试了以下方法(在许多变体中):
eval find "$1" -iname "*.ppd" -exec 'bash -c grep "\*ModelName\:" "$1" | sed "s/.*\"\(.*\)\"/\1/" \;
正如find-exec-echo-missing-argument-to-exec 中提到的。 我怎样才能不仅在终端中,而且在 bash 脚本中都可以使用第一个代码?
P.S.:我使用 eval 仅用于将字符串 "/<some_path>/{epson,epson_laser,epson_inkjet}" 扩展到多个路径。有谁知道这样做的更好解决方案?
【问题讨论】:
-
该错误意味着没有看到
\;参数,但在我上面看起来很好。请从您的脚本中粘贴确切的find行。 -
好吧,脚本中的哪一行
find没关系,因为没有人工作;)但是如何获得与我输入的第一行相同的结果,但让它在 bash 脚本中工作?当我将第一行直接输入到终端时,第一行有效,但在 bash 中,任何组合都不起作用。 -
当你使用
eval时,你必须加倍转义。第一个为原始 shell 转义字符,第二个为eval转义。 -
这就是为什么最好将
-exec命令放入脚本中,这样就不需要使用eval了。 -
实际上,我不知道你为什么首先需要使用
eval。