URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8835
[ Назад ]

Исходное сообщение
"bash на solaris 8."

Отправлено horse315 , 23-Авг-10 13:35 
Есть такой скриптик для поиска файлов по содержимому (для примера 'bin'). Нас интересуют пути к этим файлам и мы их сохраняем в out.log.
Скрипт написан в убунту и там прекрасно работает.
А вот на серваке с солярисом никак не идет:

...
grep: can't open -c
-=TMP = =-
lens.sh: line 12: [: -gt: unary operator expected
NOT FOUND
...

Напрягает именно lens.sh: line 12: [: -gt: unary operator expected

САМ СКРИПТ >>


#!/bin/bash
A=`find ~`
echo "-=A"
echo "$A"
echo "A=-"

for FILE in $A;
do
    echo "-=file name: $FILE =-"
    TMP=`cat $FILE | grep 'bin' -c`
    echo "-=TMP = $TMP=-"
    if [ $TMP -gt 0 ];
    then
        echo "FOUND"
        echo "$FILE" >> ~/out.log
    else
        echo "NOT FOUND"
    fi
done

Что же не так)


Содержание

Сообщения в этом обсуждении
"bash на solaris 8."
Отправлено Andrey Mitrofanov , 23-Авг-10 13:55 
>написан в убунту и там прекрасно работает.
>на серваке с солярисом никак
>Что же не так)

У Вас крутой позикс-юникс, то есть в нём не тот grep и нет bash-а.

Сравните вывод "grep --version" и "/bin/bash --version" на этих двух машинах.


"bash на solaris 8."
Отправлено i , 23-Авг-10 14:25 
ещё есть /usr/xpg4/bin/grep


"bash на solaris 8."
Отправлено horse315 , 24-Авг-10 09:03 
>>написан в убунту и там прекрасно работает.
>>на серваке с солярисом никак
>>Что же не так)
>
>У Вас крутой позикс-юникс, то есть в нём не тот grep и
>нет bash-а.
>
>Сравните вывод "grep --version" и "/bin/bash --version" на этих двух машинах.

Спасибо, мы тоже думали про посикс. Попробуем, посмотрим версии.



"bash на solaris 8."
Отправлено jd , 25-Авг-10 12:44 
Если гнутого грепа не найдёте, самое простое и быстрое исправление - заменить эту опцию "-c" в 10-й строке на "| wc -l".

"bash на solaris 8."
Отправлено вуглускр , 24-Авг-10 08:32 
>lens.sh: line 12: [: -gt: unary operator expected
>NOT FOUND
>...
>
>Напрягает именно lens.sh: line 12: [: -gt: unary operator expected

Это следствие того, что grep не понял -c.

На солярисе и /bin/sh и стандартный набор утилит несколько более стандартен, поэтому gnu-тые расширения не поддерживает. Более того, в /bin и /usr/bin обычно лежит нечто жутко урезанное (как тот же grep), а нормальные версии есть в /usr/xpg4/bin.


"bash на solaris 8."
Отправлено Andrey Mitrofanov , 24-Авг-10 10:55 
>>lens.sh: line 12: [: -gt: unary operator expected
>Это следствие того, что grep не понял -c.

Нет, это сообщение о том, что таки "[" не понял ключа "-gt". "[" - builtin шела, не bash -- поэтому ключи не той системы.


"bash на solaris 8."
Отправлено Аноним , 25-Авг-10 06:42 
>>>lens.sh: line 12: [: -gt: unary operator expected
>>Это следствие того, что grep не понял -c.
>
>Нет, это сообщение о том, что таки "[" не понял ключа "-gt".
>"[" - builtin шела, не bash -- поэтому ключи не той системы.

Нуууу .... Ладно бы студень какой умничал, а то неофициальный баш-сенсей и так лохануться :)

Подумай медленно - если grep не разжевал -с и небыло _что_ он венёт? И во _что_ в таком случае развернётся тот if?

Подтведить не могу, к соляре старше 10-ки уже 4-ый месяц доступа не имею, всё - помер бобик (аллилуЙА!) Но опыт - не пропьёшь :)


/Warhead Wardick йа :)



"bash на solaris 8."
Отправлено Аноним , 25-Авг-10 06:46 
Грёбанный мак!
исправить на: "если grep не разжевал -с _что_ он венрёт? "  
Неважно были или нет совпадения кстати :)


"bash на solaris 8."
Отправлено Аноним , 25-Авг-10 06:49 
>Грёбанный мак!
>исправить на: "если grep не разжевал -с _что_ он венрёт? "

"венрёт" :))))  Пойду напьюсь, а вы мужики если увидите что кто то кричит что мак - удобен - придушите его за меня :)



"bash на solaris 8."
Отправлено Andrey Mitrofanov , 25-Авг-10 09:15 
>>>>lens.sh: line 12: [: -gt: unary operator expected
>>>Это следствие того, что grep не понял -c.
>>
>>Нет, это сообщение о том, что таки "[" не понял ключа "-gt".
>>"[" - builtin шела, не bash -- поэтому ключи не той системы.
>
>Нуууу .... Ладно бы студень какой умничал, а то неофициальный баш-сенсей и
>так лохануться :)

Гы. Ж))) Ну, спасиб. Но хотелось бы оставить за собой :D возможность ошибаться.

> Подумай медленно - если grep не разжевал -с и небыло _что_ он венёт? И во _что_ в таком случае развернётся тот if?

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

> Подтведить не могу, к соляре старше 10-ки уже 4-ый месяц доступа не имею

Не солярка (и не совсем проверка, видимо):

$ sh
sh-3.2$ s=""
sh-3.2$ [ $s -gt 2 ] && echo 2
sh: [: -gt: ожидается использование унарного оператора
sh-3.2$ s=1
sh-3.2$ [ $s -gt 2 ] && echo 2
sh-3.2$ s=""
sh-3.2$ [ "$s" -gt 2 ] && echo 2
sh: [: : integer expression expected
sh-3.2$ exit
$ sh --version
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ _


"bash на solaris 8."
Отправлено meantraitor , 25-Авг-10 14:18 
>
>Это следствие того, что grep не понял -c.
>
>На солярисе и /bin/sh и стандартный набор утилит несколько более стандартен, поэтому
>gnu-тые расширения не поддерживает. Более того, в /bin и /usr/bin обычно
>лежит нечто жутко урезанное (как тот же grep), а нормальные версии
>есть в /usr/xpg4/bin.

Тем не менее, даже /usr/bin/grep на восьмой соляре понимает -c

А еще у grep есть ключик -l, более полезный в данной ситуации:

for file in `find ~`; do
  grep -l 'bin' $file
done >> out.log

А то и того проще:

(find ~ |xargs grep -l bin ) >> out.log