要识别" xargs"中的别名,我设置了别名
alias xargs="xargs bash -ic"
如果我现在执行下面的代码片段,则不会将任何参数传递给xargs的命令。
find . -name pom.xml | xargs grep projectid
事实上,即使在这种情况下,也没有参数传递给命令。
bash -ic grep projectid pom.xml
bash的文档说
-c If the -c option is present, then commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the positional parameters, starting with $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别名。
答案 0 :(得分:1)
您需要注意两件事。首先,正确引用:
find . -name pom.xml -print0 | xargs -0 bash -c "grep projectid"
其次,你需要以某种方式传递你的位置参数:
find . -name pom.xml -print0 | xargs -0 bash -c 'grep projectid "$@"' -
使用-
作为bash的第一个参数,因此位置参数从$1
开始,就像在普通的shellcript中一样。
"$@"
扩展为从1开始的引用位置参数。
由于xargs一次传递多个参数,您需要在bash脚本中使用"$@"
(引用!)或使用-n1
选项运行xargs。