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

Исходное сообщение
"проблема со скриптом на bash"

Отправлено jahmb , 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

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


Содержание

Сообщения в этом обсуждении
"проблема со скриптом на bash"
Отправлено StreSS.t , 26-Сен-14 13:06 
Зачем экранировать кавычки?

"проблема со скриптом на bash"
Отправлено jahmb , 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


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

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

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

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


"проблема со скриптом на bash"
Отправлено jahmb , 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 $*"

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


"проблема со скриптом на bash"
Отправлено jahmb , 26-Сен-14 13:31 
хм кажется понял, скрипт который грепает, тоже попадает в результат выполнения..

"проблема со скриптом на bash"
Отправлено StreSS.t , 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


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

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


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

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


"проблема со скриптом на bash"
Отправлено тень_pavel_simple , 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


"проблема со скриптом на bash"
Отправлено pavlinux , 28-Сен-14 06:12 
О, Домашнее задание:

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

P.S.

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

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


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

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


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

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


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

Ты про pgrep?


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

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


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

ps ax | grep 'b[a]sh'


"проблема со скриптом на bash"
Отправлено Аноним , 02-Окт-14 04:38 
> ps ax | grep 'b[a]sh'

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


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


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

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


"проблема со скриптом на bash"
Отправлено Аноним , 03-Окт-14 00:00 
> Садись, пять! Кавычки кстати необязательно

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