【发布时间】:2015-07-01 19:09:17
【问题描述】:
为了识别“xargs”中的别名,我设置了一个别名
alias xargs="xargs bash -ic"
如果我现在执行下面的 sn-p,则不会将任何参数传递给 xargs 的命令。
find . -name pom.xml | xargs grep projectid
事实上,即使在这种情况下,也不会向命令传递任何参数。
bash -ic grep projectid pom.xml
bash 的文档说
-c 如果存在 -c 选项,则从第一个非选项中读取命令 参数命令字符串。如果 command_string 后面有参数,它们 分配给位置参数,从 $0 开始。那我做错了什么?
bash --version
GNU bash, version 4.3.39(2)-release (x86_64-unknown-cygwin)
更新:
感谢@knittl 的投入。现在的解决方案可以避免@knittl 答案中的所有额外标点符号。
1. 下载xargs_bash_alias.sh
2.设置别名
alias xargs="<path>/xargs_bash_alias.sh"
现在您的 xargs 命令将识别您的其他 bash 别名。
【问题讨论】:
-
bash -c grep projectid pom.xml执行命令grep并具有位置参数$0(projectid) 和$1(pom.xml`)。您的命令未使用位置参数。 -
您知道
"$*"不适用于多字参数吗? -
我不知道。不是 bash 大师。你有什么建议吗?
-
看我的回答,我不明白为什么它不适用于你的场景
-
你的答案有效。我确实感谢你的投入:-)。我想避免命令中所有额外的标点符号。使用该脚本,我只需键入“find
| xargs grep ”。因此,如果设置了 bash 别名,现在将使用“grep --color”。