The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"проблема со скриптом на bash"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"проблема со скриптом на bash"  +/
Сообщение от jahmb email(ok) on 26-Сен-14, 12:59 
Здравствуйте.
Подскажите пожалуйста, как решить задачу.
Есть скрипт:

#!/bin/bash
e=`ps xa | grep \" $* \"`
echo $e

Скрипт запускается так:

./temp.sh 1 2 3

Задача - грепнуть по про процессам командой:
ps xa | grep "1 2 3"

Это нужно т.к. одновременно может быть запущено очень много экземпляров скрипта с разными параметрами.

Проблема в том, что не получается кавычки передать на выполнение, т.е. всегда получается что-то типа:

bash -x ./temp.sh 1 2 3
++ ps xa
++ grep '"' 1 2 3 '"'
grep: 2: No such file or directory
grep: 3: No such file or directory
grep: ": No such file or directory
+ e=
+ echo

пробовал разные комбинации окавычивания и экранирования, не помогает.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "проблема со скриптом на bash"  +/
Сообщение от StreSS.t (ok) on 26-Сен-14, 13:06 
Зачем экранировать кавычки?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "проблема со скриптом на bash"  +/
Сообщение от jahmb email(ok) on 26-Сен-14, 13:10 
> Зачем экранировать кавычки?

а если их не экранировать, то получается так:

скрипт:
#!/bin/bash
e=`ps xa | grep "$*"`
echo $e

результат выполнения:

bash -x ./temp.sh 1 2 3
++ ps xa
++ grep '1 2 3'
+ e='23424 pts/5    S+     0:00 bash -x ./temp.sh 1 2 3
23426 pts/5    S+     0:00 bash -x ./temp.sh 1 2 3
23428 pts/5    S+     0:00 grep 1 2 3'
+ echo 23424 pts/5 S+ 0:00 bash -x ./temp.sh 1 2 3 23426 pts/5 S+ 0:00 bash -x ./temp.sh 1 2 3 23428 pts/5 S+ 0:00 grep 1 2 3
23424 pts/5 S+ 0:00 bash -x ./temp.sh 1 2 3 23426 pts/5 S+ 0:00 bash -x ./temp.sh 1 2 3 23428 pts/5 S+ 0:00 grep 1 2 3

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "проблема со скриптом на bash"  +/
Сообщение от StreSS.t (ok) on 26-Сен-14, 13:12 
The special parameters * and @ have special meaning when in double quotes (see PARAMETERS below).

Он заменяется на то что вы передали в параметрах + кавычки с двух сторон

Параметры Вы сами должны экранировать при передаче их скрипту.

Скрипт вроде правильно выполнился.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "проблема со скриптом на bash"  +/
Сообщение от jahmb email(ok) on 26-Сен-14, 13:22 
> The special parameters * and @ have special meaning when in double
> quotes (see PARAMETERS below).
> Он заменяется на то что вы передали в параметрах + кавычки с
> двух сторон
> Параметры Вы сами должны экранировать при передаче их скрипту.

в том и дело, что скрипт запускается так

./temp.sh 1 2 3

он выполняется в течении некоторого времени и висит в процессах соответственно также, для примера:
3854 pts/5 S+ 0:00 /bin/bash ./temp.sh 1 2 3

соответственно, что бы grep его нашел, нужно дать команду ps xa | grep "1 2 3" или ps xa | grep "./temp.sh 1 2 3" что эквивалентно ps xa | grep "$@", или ps xa | grep "$*" или ps xa | grep "$0 $*"

Дело в том, что мне нужно дать эту команду из скрипта, распарсить результат и присвоить некоторое значение переменной.
Не могу понять, как правильно это сделать

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "проблема со скриптом на bash"  +/
Сообщение от jahmb email(ok) on 26-Сен-14, 13:31 
хм кажется понял, скрипт который грепает, тоже попадает в результат выполнения..
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "проблема со скриптом на bash"  +/
Сообщение от StreSS.t (ok) on 26-Сен-14, 13:35 
#!/bin/bash                                                                                
ps xa | grep  "$*"  |while read line                                  
do                                                                  
    echo $line                                                          
done


sh  ./test.sh 1 2 3                                  
24837 pts/25 S+ 0:00 sh ./test.sh 1 2 3
24839 pts/25 S+ 0:00 grep 1 2 3
24840 pts/25 S+ 0:00 sh ./test.sh 1 2 3


ps xa | grep "$*" | grep -v grep  |while... - уберет из вывод grep

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "проблема со скриптом на bash"  +1 +/
Сообщение от Andrey Mitrofanov on 26-Сен-14, 14:23 
> пробовал разные комбинации окавычивания и экранирования, не помогает.

И Вас также с Новым Учебным Годом!

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "проблема со скриптом на bash"  +/
Сообщение от jahmb email(ok) on 26-Сен-14, 15:22 
>> пробовал разные комбинации окавычивания и экранирования, не помогает.
> И Вас также с Новым Учебным Годом!

:D
эрм, мне уже поздновато...
хотя учиться никогда не поздно ;)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "проблема со скриптом на bash"  +/
Сообщение от тень_pavel_simple on 26-Сен-14, 21:56 
>[оверквотинг удален]
> получается что-то типа:
> bash -x ./temp.sh 1 2 3
> ++ ps xa
> ++ grep '"' 1 2 3 '"'
> grep: 2: No such file or directory
> grep: 3: No such file or directory
> grep: ": No such file or directory
> + e=
> + echo
> пробовал разные комбинации окавычивания и экранирования, не помогает.

Man pgrep

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "проблема со скриптом на bash"  +/
Сообщение от pavlinux (ok) on 28-Сен-14, 06:12 
О, Домашнее задание:

Как вывести ОДНОЙ командой результат grep, исключая сам grep?  

P.S.

Кто будет пользоваться гуглой/поисковиками - считайте вы насрали себе в карму!
Бонусы в карму за отказ от манов!

Mitrofanov не подсказывай, пущай мучаются.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "проблема со скриптом на bash"  +1 +/
Сообщение от Andrey Mitrofanov on 28-Сен-14, 10:05 
> О, Домашнее задание:
> Как вывести ОДНОЙ командой результат grep, исключая сам grep?

На пять с плюсом: чего хотел сказать павлин.
На шесть с плюсом: сформулировать русским языком для троечников.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "проблема со скриптом на bash"  +/
Сообщение от pavlinux (ok) on 28-Сен-14, 17:34 
>> О, Домашнее задание:
>> Как вывести ОДНОЙ командой результат grep, исключая сам grep?
> На пять с плюсом: чего хотел сказать павлин.

grep something | grep -v grep, без "grep -v grep"

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "проблема со скриптом на bash"  +/
Сообщение от Аноним (??) on 30-Сен-14, 10:34 
>>> О, Домашнее задание:
>>> Как вывести ОДНОЙ командой результат grep, исключая сам grep?
>> На пять с плюсом: чего хотел сказать павлин.
> grep something | grep -v grep, без "grep -v grep"

Ты про pgrep?

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "проблема со скриптом на bash"  +/
Сообщение от pavlinux (ok) on 30-Сен-14, 17:27 
>>>> О, Домашнее задание:
>>>> Как вывести ОДНОЙ командой результат grep, исключая сам grep?
>>> На пять с плюсом: чего хотел сказать павлин.
>> grep something | grep -v grep, без "grep -v grep"
> Ты про pgrep?

Нет, простой grep.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "проблема со скриптом на bash"  +/
Сообщение от Led (ok) on 01-Окт-14, 03:20 
>>>>> О, Домашнее задание:
>>>>> Как вывести ОДНОЙ командой результат grep, исключая сам grep?
>>>> На пять с плюсом: чего хотел сказать павлин.
>>> grep something | grep -v grep, без "grep -v grep"
>> Ты про pgrep?
> Нет, простой grep.

ps ax | grep 'b[a]sh'

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "проблема со скриптом на bash"  –1 +/
Сообщение от Аноним (??) on 02-Окт-14, 04:38 
> ps ax | grep 'b[a]sh'

::[||||||\    \||||||||||||||||||||||||||]::


Этот знак означает "Баян порванный" .

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "проблема со скриптом на bash"  +/
Сообщение от pavlinux (ok) on 02-Окт-14, 15:44 
>>>>>> О, Домашнее задание:
>>>>>> Как вывести ОДНОЙ командой результат grep, исключая сам grep?
>>>>> На пять с плюсом: чего хотел сказать павлин.
>>>> grep something | grep -v grep, без "grep -v grep"
>>> Ты про pgrep?
>> Нет, простой grep.
> ps ax | grep 'b[a]sh'

Садись, пять! Кавычки кстати необязательно

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "проблема со скриптом на bash"  +/
Сообщение от Аноним (??) on 03-Окт-14, 00:00 
> Садись, пять! Кавычки кстати необязательно

А я бы в морду дал за то что рыбу распугал :)

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру