Как использовать трубу в выражении foreach - PullRequest
2 голосов
/ 09 марта 2010

У меня есть цикл for, который я хотел бы запустить в bash, например:

for i in user_* do; cat $i | ./fetch_contact.php ; done;

Всегда выдает ошибку типа

-bash: синтаксическая ошибка рядом с неожиданным токеном `done '

Я предполагаю, что это как-то связано с каналом, но я ничего не пытаюсь добавить (скобки и т. Д.), Чтобы обернуть канал достаточно. Как вы используете канал в такой команде?

Ответы [ 6 ]

4 голосов
/ 09 марта 2010

В Bash do - это команда . Кроме того, это for не foreach. Вот исправление:

for i in user_*; do cat $i | ./fetch_contact.php; done;
1 голос
/ 09 марта 2010

Почему цикл?

cat user_* | ./fetch_contact.php
1 голос
/ 09 марта 2010

Оказывается, получать и точку с запятой все остальное верно делает всю эту трубу вещь спорное.

for i in user_*; do cat $i | ./fetch_contact.php; done;
0 голосов
/ 09 марта 2010

вот один с проверкой

for file in user_*
do
  if [ -f "$file" ];then
    ./fetch_contact.php < "$file"
  fi
done
0 голосов
/ 09 марта 2010

Нет необходимости для cat:

for i in user_* ; do ./fetch_contact.php < "$i" ; done
0 голосов
/ 09 марта 2010

foreach i in user_*; do cat $i | ./fetch_contact.php ; done;

Точка с запятой должна идти до do, а не после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...