The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
bash - поиск нужного файла и получение пути к файлу, !*! rfcr, 28-Апр-09, 16:57  [смотреть все]
Всем привет!
Буду благодарен если кто подскажет или поможет разобраться....

Пишу скрипт на bash, который по замыслу должен искать в определенном файле определенную строку и если таковая строка есть в этом файле то - выводить путь к этому файлу, в переменную или на экран не важно.

Вот кусок скрипта:

VMNAME="$1"


VMNAME=`echo "displayName = \"${VMNAME}\""`
echo $VMNAME
echo ""
VMNAME2=`echo "'${VMNAME}'"`
echo $VMNAME2
#Пример того, что передается grep - 'displayName = "xmachine"'
F=`find /m* -name '*.vmx' -print0 | xargs --null grep -l "$VMNAME2"`
echo ""
echo $F

Когда запускаю скрипт - он выдает только значения переменных (поставленных для контроля) и grep видимо не понимает что от него хотят:

# ./x xmachine
displayName = "xmachine"

'displayName = "xmachine"'

И все, больше ничего.


В ручную когда запускаю, все работает:

#find /m* -name '*.vmx' -print0 | xargs --null grep -l -i 'displayName = "xmachine"'

/m/x-machine/SUSE Linux.vmx


В чем тут может быть дело??

  • bash - поиск нужного файла и получение пути к файлу, !*! Wolkodaw, 23:09 , 28-Апр-09 (1)
    Надо так:
    F=`find /m* -name '*.vmx' -print0 | xargs --null grep -l -i "$VMNAME"`
    Иначе она будет искать именно строку с кавычками. А строки с кавычками в файле - нет.

    Так же, как и ты - ищёшь
    find /m* -name '*.vmx' -print0 | xargs --null grep -l -i 'displayName = "xmachine"'

    а не
    find /m* -name '*.vmx' -print0 | xargs --null grep -l -i "'displayName = \"xmachine\"'"

    • bash - поиск нужного файла и получение пути к файлу, !*! rfcr, 09:48 , 29-Апр-09 (2)
      Спасибо! Получилось.
      Пишу скрипт дальше и опять те же грабли...

      Делаю следующее:
      F=`find /m* -name '*.vmx' -print0 | xargs --null grep -l -i "$VMNAME"`

      echo ""
      F=`echo "\"${F}\""`
      echo $F
      vmware-cmd $F getstate

      Vmware-cmd ругается на присутствие пробелов и не отрабатывает как надо. И вроде заключил в кавычки и переменная нормально выводится:

      # ./x "x - machine"
      displayName = "x - machine"

      "/m/x-machine/SUSE Linux.vmx"
      /usr/bin/vmware-cmd: Could not connect to VM "/m/x-machine/SUSE
        (VMControl error -14: Unexpected response from vmware-authd: Invalid pathname: "/m/x-machine/SUSE)

      Что ж такое!

      Догадался сам :) Надо так:

      vmware-cmd "${F}" getstate

      Тогда все работает как надо..




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

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