LINUX.ORG.RU

sed подстановка переменных

 , ,


0

1

Есть виртуальная машина с CentOS7. Подключаясь к этой машине через консольку, т.е. tty1 в vmware делаю следующее:

$ ls test
test

$ cat test
IPADDR=10.9.0.201
--------------------------

CUR_ADDR=10.9.0.201
ADDR=1.1.1.1

$ sed -i "s/$CUR_ADDR/$ADDR/g" test
$ cat test
IPADDR=10.9.0.201

Т.е. адрес не меняется.

Если подключаюсь через ssh - подстановка отрабатывает и адрес меняется.

Вопрос - что я забыл? Почему через tty не отрабатывает?



Последнее исправление: Toten_Kopf (всего исправлений: 1)

CUR_ADDR ADDR

это у тебя не переменные, а просто текст, выполни в интерпретаторе перед выполнением скрипта

export IPADDR=10.9.0.201
export ADDR=1.1.1.1

потом запускай команду sed

IvanRia
()
Ответ на: комментарий от futurama

ну, вообще, если он напишет в своем файле без export и выполнит, например, source, а потом запустит свой sed, то sed не увидит переменных

IvanRia
()
Ответ на: комментарий от oS_a

Проблема решена. Я слепошара.

Я в шапке указал редуцированный результат моих изысканий, уже после некоторого убитого времени. Когда я уже добрался до проблемного участка в скрипте. На самом деле переменную 'CUR_ADDR' я получаю в результате

CUR_ADDR=$(hostname -I)

А результат '$(hostname -I)' возвращается с пробелом, мать его, в конце. Ну и понятное дело интересующие меня строки не совпадают по шаблону. А через ssh, в момент проверок, я в какой-то момент зафигачил переменную руками, без пробела.

Toten_Kopf
() автор топика
Ответ на: комментарий от ComIngSoon

Не лишняя. Это отрезок из скрипта, и мне оно там надо. Ответ на мою ‘проблему’ в моём комменте выше.

Toten_Kopf
() автор топика
Ответ на: комментарий от IvanRia

Это у меня ещё какие переменные. Самые настоящие. Экспорт мне не нужен. Проблема была в другом. Ответ на мою проблему в моём комменте выше.

Toten_Kopf
() автор топика
Ответ на: комментарий от IvanRia

Ну и так, чисто для установления правды:

$ ls aaa.sh test zzz
aaa.sh  test  zzz
--------------------------

$ cat aaa.sh
#!/bin/bash

. ./zzz

echo $CUR_ADDR
echo $ADDR

sed "s/$CUR_ADDR/$ADDR/g" test
------------------------------

$ cat zzz
CUR_ADDR=10.9.0.201
ADDR=1.1.1.1
------------------------------

$ cat test
IPADDR=10.9.0.201
-----------------------------

$ ./aaa.sh
10.9.0.201
1.1.1.1
IPADDR=1.1.1.1

Нафиг тут экспорт не упал.

Toten_Kopf
() автор топика
Последнее исправление: Toten_Kopf (всего исправлений: 1)
Ответ на: комментарий от Toten_Kopf

А результат ‘$(hostname -I)’ возвращается с пробелом

$ ADDR=$(hostname -I)
$ ADDR=`echo $ADDR`

Вспомнил такие конструкции в старых скриптах, прослезился

futurama ★★★★★
()
Ответ на: комментарий от SpaceRanger

Проблема твоих глаз. Что же теперь не использовать это?

futurama ★★★★★
()
Ответ на: комментарий от Toten_Kopf

Да делайте как хотите, бездельничаете на работе, вот и придрались к export

IvanRia
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.