Есть такой скриптик для поиска файлов по содержимому (для примера '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Что же не так)
>написан в убунту и там прекрасно работает.
>на серваке с солярисом никак
>Что же не так)У Вас крутой позикс-юникс, то есть в нём не тот grep и нет bash-а.
Сравните вывод "grep --version" и "/bin/bash --version" на этих двух машинах.
ещё есть /usr/xpg4/bin/grep
>>написан в убунту и там прекрасно работает.
>>на серваке с солярисом никак
>>Что же не так)
>
>У Вас крутой позикс-юникс, то есть в нём не тот grep и
>нет bash-а.
>
>Сравните вывод "grep --version" и "/bin/bash --version" на этих двух машинах.Спасибо, мы тоже думали про посикс. Попробуем, посмотрим версии.
Если гнутого грепа не найдёте, самое простое и быстрое исправление - заменить эту опцию "-c" в 10-й строке на "| wc -l".
>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.
>>lens.sh: line 12: [: -gt: unary operator expected
>Это следствие того, что grep не понял -c.Нет, это сообщение о том, что таки "[" не понял ключа "-gt". "[" - builtin шела, не bash -- поэтому ключи не той системы.
>>>lens.sh: line 12: [: -gt: unary operator expected
>>Это следствие того, что grep не понял -c.
>
>Нет, это сообщение о том, что таки "[" не понял ключа "-gt".
>"[" - builtin шела, не bash -- поэтому ключи не той системы.Нуууу .... Ладно бы студень какой умничал, а то неофициальный баш-сенсей и так лохануться :)
Подумай медленно - если grep не разжевал -с и небыло _что_ он венёт? И во _что_ в таком случае развернётся тот if?
Подтведить не могу, к соляре старше 10-ки уже 4-ый месяц доступа не имею, всё - помер бобик (аллилуЙА!) Но опыт - не пропьёшь :)
/Warhead Wardick йа :)
Грёбанный мак!
исправить на: "если grep не разжевал -с _что_ он венрёт? "
Неважно были или нет совпадения кстати :)
>Грёбанный мак!
>исправить на: "если grep не разжевал -с _что_ он венрёт? ""венрёт" :)))) Пойду напьюсь, а вы мужики если увидите что кто то кричит что мак - удобен - придушите его за меня :)
>>>>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.
$ _
>
>Это следствие того, что 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