The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
проблема со скриптом на 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, 13:06 , 26-Сен-14 (1)
    Зачем экранировать кавычки?
    • проблема со скриптом на bash, !*! jahmb, 13:10 , 26-Сен-14 (2)
      > Зачем экранировать кавычки?

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

      скрипт:
      #!/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, 13:12 , 26-Сен-14 (3)
        The special parameters * and @ have special meaning when in double quotes (see PARAMETERS below).

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

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

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

        • проблема со скриптом на bash, !*! jahmb, 13:22 , 26-Сен-14 (4)
          > 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, 13:31 , 26-Сен-14 (5)
            хм кажется понял, скрипт который грепает, тоже попадает в результат выполнения..
          • проблема со скриптом на bash, !*! StreSS.t, 13:35 , 26-Сен-14 (6)
            #!/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, 14:23 , 26-Сен-14 (7) +1
    > пробовал разные комбинации окавычивания и экранирования, не помогает.

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

  • проблема со скриптом на bash, !*! тень_pavel_simple, 21:56 , 26-Сен-14 (9)
    >[оверквотинг удален]
    > получается что-то типа:
    > 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, 06:12 , 28-Сен-14 (10)
    О, Домашнее задание:

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

    P.S.

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

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




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

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