使用Xargs等待输入密钥

时间:2015-06-18 19:42:02

标签: linux bash shell xargs

所以,我有一个文件列表,我想用它来生成一组新的文件组。我想一次打开这些组(多个文件)。编辑它们。然后返回终端,按回车键,然后打开下一组文件。

我已经开始工作了,但是我正在使用临时文件这样做

cat failingAll | awk '{print $2}' | xargs -I {} -L 1 sh -c "find {} | grep xml | xargs echo;" | perl -pe "s/^(.*)$/open \1;read;/g" > command.sh ; sh command.sh

这可能只与xargs有关吗?真的,我的意思是没有临时文件。我试过这个

cat failingAll | awk '{print $2}' | xargs -I {} -L 1 sh -c "find {} | grep xml | xargs open ; read;"

但它不会在组之间暂停,它只会立即打开它们(并崩溃我的xml编辑器。)

2 个答案:

答案 0 :(得分:0)

尝试这样的事情,并在编辑完每组文件后退出编辑器?

while IFS= read -r dir; do
    files=()
    while IFS= read -r -d '' xmlfile; do
        files+=("$xmlfile")
    done < <(find "$dir" -name "*.xml" -type f -print0)
    open -W "${files[@]}"
done < <(awk '{print $2}' failingAll)

假设您不想退出编辑器并假设它可以通过后续调用open来获取一组新文件,那么以下内容也可能有效:

while IFS= read -u 3 -r dir; do
    files=()
    while IFS= read -r -d '' xmlfile; do
        files+=("$xmlfile")
    done < <(find "$dir" -name "*.xml" -type f -print0)
    open "${files[@]}"
    read
done 3< <(awk '{print $2}' failingAll)

答案 1 :(得分:0)

根据Etan Reisner的回答,我发现这也有效

cat failingAll | awk '{print $2}' | xargs -I {} -L 1 sh -c "find {} | grep xml | xargs open -W"

但它并没有做我想要的任何等待进入的东西。我相信它是因为xargs继续将它送到下一行来打破read命令。