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

Исходное сообщение
"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 , 28-Апр-09 23:09 
Надо так:
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 , 29-Апр-09 09:48 
Спасибо! Получилось.
Пишу скрипт дальше и опять те же грабли...

Делаю следующее:
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

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