首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找-exec arg上的命令模糊处理

查找-exec arg上的命令模糊处理
EN

Stack Overflow用户
提问于 2014-09-11 01:53:28
回答 1查看 137关注 0票数 0

我正在尝试从脚本构建和运行一个find命令。但是我从find那里得到了一条非常神秘的错误信息。下面基本上总结了我如何构建命令行并运行它

代码语言:javascript
复制
$ xx="find . -name 'p*' -mmin +10 -exec echo {} \\;"
$ echo "$xx" #.....and I get the same print from echo $xx
find . -name 'p*' -mmin +10 -exec echo {} \;
$ $xx
find: missing argument to `-exec'
$ find . -name 'p*' -mmin +10 -exec echo {} \;
./p2.sh
./p1.sh
$ read xx
find . -name 'p*' -mmin +2 -exec echo {} \\;
$ $xx
find: missing argument to `-exec'

我被困住了,感谢你的帮助。我也想知道是什么导致了这一切。我在SLES上使用bash 3.2.51。

我想执行的实际命令稍微长一点,但这里使用echo只是为了说明。

谢谢迪内什

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-11 02:00:01

试图将复杂的命令存储在bash变量中,然后很好地计算变量,这是行不通的。

如果需要分段构建命令,请使用数组。请参阅这个有用的Bash:我试图在变量中放置一个命令,但是复杂的情况总是失败的!

以下是基本策略:

代码语言:javascript
复制
# Make an array
declare -a findcmd=(find .)
# Add some arguments
findcmd+=(-name 'p*')
findcmd+=(-mmin +10)
findcmd+=(-exec echo {} \;)
# Run the command
"${findcmd[@]}"

你需要了解bash的引用是如何工作的。请记住,当您输入命令(或bash从脚本文件读取命令时)时,引用(和取消引用)只发生一次。进入变量值的引号只是普通字符。

如果您正在试验set -x,还请记住,set -x插入引号是为了消除歧义。这些引号不是变量的一部分。虽然这显然是必要的,但对于不熟悉bash执行模型的程序员来说,这似乎是令人困惑的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25777802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档