bash true / false ошибка перенаправления - PullRequest
1 голос
/ 17 августа 2011

При bash 4.2.8(1)-release (x86_64-pc-linux-gnu) в Ubuntu 11.04 эта команда

[ $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 ] || echo "no"

дает

 echo: command not found

до тех пор, пока предложение || вступит в силу.Предложение && работает.Я пытался изменить порядок (сначала ||, сначала &&), но безрезультатно.

Забавно,

true && echo "yes" || echo "no"

выход

yes

и

false && echo "yes" || echo "no"

приводит к

no

, поэтому я полагаю, что что-то не так с моим предложением test.Я хотел бы проверить, меньше ли длина файла some.log или равна 6, если нет, то сделать что-то еще, если да.

Двойные скобки в предложении test не работают,либо.

Длинная форма теста работает, хотя:

test $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 && echo "yes" || echo "no"
yes

Забавно, да?

Как всегда, спасибо за любые советы / подсказки по этому.

Christian.

Ответы [ 3 ]

1 голос
/ 17 августа 2011

Попробуйте это (с 2 [и]):

[[ $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 ]] || echo "no"
^^                                                  ^^

От человека Баша:

Составные команды

...

[[ expression ]]

Возвращает состояние 0 или 1 в зависимости от оценки выражения условного выражения. Выражения состоят из основных цветов, описанных ниже в разделе «Условные выражения».

Полагаю, единственное [и] не является стандартом для проведения тестов, даже если он работает на моей стороне.

Edit:

На самом деле [и] - это стандартный способ выполнения тестов, это команда buildin в bash. Если [[...]] работает, а [...] не работает, я бы не понял этого полностью. Это может быть связано с расширением, выполненным / не выполненным в [и].

1 голос
/ 11 апреля 2014

Это та же проблема, что и в вашем другом вопросе здесь - ваше пространство равно 0xC2 0xA0 вместо 0x20. Скопированный и вырезанный из вашего вопроса:

$ echo "  echo " | hexdump -C
00000000  20 c2 a0 65 63 68 6f 20  0a                       | ..echo .|
00000009
#            ^^ ^^                                            ^^

После удаления и повторного ввода двух начальных пробелов:

$ echo "  echo " | hexdump -C
00000000  20 20 65 63 68 6f 20 0a                           |  echo .|
00000008
#            ^^                                               ^
0 голосов
/ 17 августа 2011

Не знаю, почему у вас не работает

Попробуйте это

 :>bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.


[ $( wc -l < /var/www/some.log  ) -le 6 ] || echo no
no

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

PS, как вы, кажется, новый пользователь, еслиВы получите ответ, который поможет вам, не забудьте пометить его как принятый и / или дать ему + (или -) в качестве полезного ответа.

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