xargs擅长插入初始参数:
btn_click()
{
console.log("execute");
login.isvaliduser(id,pwd);-----------------------1
var rid = login.get("roleId").getItem(0);---------------------2
console.log("role:"+rid);
}
生成此输出:
seq 0 10 | xargs -n 3 echo foo
当我还想要尾随参数时呢? 那就是什么命令:
foo 0 1 2
foo 3 4 5
foo 6 7 8
foo 9 10
将产生以下所需的输出:
seq 0 10 | xargs -n 3 <WHAT GOES HERE?>
我尝试了以下内容:
foo 0 1 2 bar
foo 3 4 5 bar
foo 6 7 8 bar
foo 9 10 bar
这几乎是正确的,除了它显然每个命令行强制1个项目,这不是我想要的:
seq 0 10 | xargs -n 3 -I {} echo foo {} bar
答案 0 :(得分:3)
从@ netniV的回答开始计算出这个问题之后, 我现在看到man page实际上包含一个例子 显示如何做到这一点:
xargs sh -c 'emacs "$@" < /dev/tty' emacs
启动所需的最小数量的Emacs副本,一个在此之后 另外,编辑xargs标准输入上列出的文件。这个例子 实现与BSD的-o选项相同的效果,但是以更灵活和便携的方式。
而wikipedia page显示了一种类似的技巧,并在最后解释了虚拟arg:
实现类似效果的另一种方法是使用shell作为已启动的命令,并处理该shell中的复杂性, 例如:
$ mkdir ~/backups $ find /path -type f -name '*~' -print0 | xargs -0 bash -c 'for filename; do cp -a "$filename" ~/backups; done' bash
该行末尾的单词
bash
由bash -c
解释为特殊参数$0
。如果没有bash这个词的名字,那就是 第一个匹配的文件将分配给$0
,文件不会 被复制到~/backups
。可以使用任何单词代替bash
,但是 因为$0
通常会扩展为shell或shell脚本的名称 被执行,bash
是一个不错的选择。
所以,这是如何做到的:
seq 0 10 | xargs -n 3 sh -c 'echo foo "$@" bar' some_dummy_string
输出符合要求:
foo 0 1 2 bar
foo 3 4 5 bar
foo 6 7 8 bar
foo 9 10 bar
答案 1 :(得分:2)
使用xargs的-i参数,例如:
ls -1 | xargs -t -i echo "Found {} file"
请注意,-t仅用于显示将要发出的命令。在运行时,请不要使用-t参数。
{}
被实际参数替换。请注意,这意味着每个命令每个文件只运行一次。不是一组文件。如果需要使用不同的替换字符串,请在-i
ls -1 | xargs -t -i[] xargs echo "Found []{} file"
将{}
保留在[]
创建一个名为runme.sh
的脚本文件#!/bin/sh
echo "foo $@ bar"
确保chmod + X然后使用
seq 0 10 | xargs -n 3 ./runme.sh
这会产生
foo tests tree.php user_admin.php bar
foo user_domains.php user_group_admin.php utilities.php bar
foo vdef.php bar