Извлечь аргументы из stdout и pipe - PullRequest
1 голос
/ 01 июля 2011

Я пытался выполнить скрипт n раз с другим файлом в качестве аргумента каждый раз, используя это:

ls /user/local/*.log | xargs script.pl

(script.pl принимает имя файла в качестве аргумента)

Но скрипт выполняется только один раз. Как решить это? Я не делаю это правильно?

Ответы [ 3 ]

2 голосов
/ 01 июля 2011
 ls /user/local/*.log | xargs -rn1 script.pl

Полагаю, ваш скрипт ожидает только один параметр, вам нужно сообщить об этом xargs.

Передача -r помогает, если список ввода будет пустым

Обратите внимание, что что-то вроде следующего, в общем, лучше:

 find /user/local/ -maxdepth 1 -type f -name '*.log' -print0 |
       xargs -0rn1 script.pl

Он будет обрабатывать цитаты и каталоги безопаснее.


Чтобы увидеть, что на самом деле выполняет xargs, используйте флаг -t.

0 голосов
/ 01 июля 2011

Я бы не стал использовать ls, поскольку во многих системах это часто псевдоним.Например, если ваш ls производит цветной вывод, то это не сработает: для i в ls;do ls $ i; done

Скорее, вы можете просто позволить оболочке расширить символ подстановки для вас: для i в /usr/local/*.log;do script.pl $ i;сделано

0 голосов
/ 01 июля 2011

Надеюсь, это поможет:

for i in $(ls /usr/local/*.log)
do
  script.pl $i
done
...