Перенаправление Bash в сочетании с обозначением «двойная труба» - PullRequest
4 голосов
/ 21 июля 2009

Можно ли объединить перенаправление вывода в файл и каналы с ||? (Не уверен, как это называется)

Пример:

(wget -qO- example.com/duff || exit) | some_processing >> outfile.txt

Если wget не работает, я хотел бы выйти и не запускать some_processing или создать пустой файл.

Ответы [ 5 ]

3 голосов
/ 21 июля 2009
#!/bin/bash

RESULT=`wget -qO- example.com/duff`

if [ $? -eq 0 ];
then
  echo $RESULT | some_processing >> outfile.txt
fi
3 голосов
/ 21 июля 2009

|| является логическим или. Не создание outfile.txt потребовало бы гораздо более сложного синтаксиса; как вы написали (обычным способом), outfile.txt создается еще до запуска wget.

Честно говоря, я не могу придумать, каким образом заставить трубу вообще не произойти, если левая команда не будет выполнена. Я бы просто написал скрипт на Perl на твоем месте.

1 голос
/ 22 июля 2009

([$? -Eq 0] && some_processing >> outfile.txt) <<< $ (wget -qO- example.com/duff)</p>

0 голосов
/ 22 июля 2009

Обратите внимание, что может быть недостаточно проверить код возврата. также может быть полезно проверить состояние HTTP на возврат, например 404 ..... и т. д.

0 голосов
/ 21 июля 2009

Думаю, вы в значительной степени ответите, как это сделать.

Если wget не работает, я хотел бы выйти и не запускать some_processing или создать пустой файл.


wget wget -qO- example.com/duff

если [[$? -не 0]] // $? означает возвращаемое значение, в хорошо написанных программах это должно быть ноль

1012 * тогда *

some_processing >> outfile.txt

ц


Я думаю, что это достигнет того, что вы хотите.

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