Всем привет!
Буду благодарен если кто подскажет или поможет разобраться....Пишу скрипт на 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
В чем тут может быть дело??
Надо так:
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\"'"
Спасибо! Получилось.
Пишу скрипт дальше и опять те же грабли...Делаю следующее:
F=`find /m* -name '*.vmx' -print0 | xargs --null grep -l -i "$VMNAME"`echo ""
F=`echo "\"${F}\""`
echo $F
vmware-cmd $F getstateVmware-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
Тогда все работает как надо..