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

Исходное сообщение
"Программирование Shell"

Отправлено Voblin , 12-Окт-07 17:45 
Подскажите как сделать
У меня есть три файла: 1.dat, 2.dat, 3.dat

------------
1.dat

a="Путь1"
b="Путь2"
------------
------------
2.dat

Идти $a
------------
------------
3.dat

Идти $b
------------
Как мне их собрать в один файл 4.dat вида
----------
4.dat

Идти Путь1
Идти Путь2
----------

Т.е. в файле 1.dat содержатся переменные a и b с параметрами Путь1 Путь2, в файлах 2.dat и 3.dat строка "Идти " и имя переменной $a и $b соответственно, а в резльтате получается файл 4.dat

Как просто слить файлы я нашёл

#!/bin/bash
a="Путь1"
aaa="11.txt"
bbb="111.txt"
ccc="222.txt"
ddd="1.txt"
cat >> $ccc < $aaa
cat >> $ccc < $ddd
cat >> $ccc < $bbb

но замена переменной а при таком варианте не происходит просто в выходном файле остаётся $a

Что делать?


Содержание

Сообщения в этом обсуждении
"Программирование Shell"
Отправлено madskull , 12-Окт-07 18:49 
Это чье ж больное воображение такое родило?.. :)

. 1.dat
eval echo `cat 2.dat` >> 4.dat
eval echo `cat 3.dat` >> 4.dat


"Программирование Shell"
Отправлено Voblin , 15-Окт-07 10:04 
>Это чье ж больное воображение такое родило?.. :)
>
>. 1.dat
>eval echo `cat 2.dat` >> 4.dat
>eval echo `cat 3.dat` >> 4.dat

Ну моё, только это не сильно отличается от твоей кострукции. но я не нашёл конструкцию eval echo.
А как сделать чтобы перевод строки не исчезал?



"Программирование Shell"
Отправлено Voblin , 15-Окт-07 12:34 
Как с помощью echo вывести могострочный текст типа :

строка1
строка2
строка3

именно в таком виде с переводами строки, а то echo не выводит по умолчанию перевод строки и выдаёт:

строка1 строка2 строка3



"Программирование Shell"
Отправлено phpcoder , 15-Окт-07 12:40 
>Как с помощью echo вывести могострочный текст типа :

Двойные кавычки вам в помощь!



"Программирование Shell"
Отправлено madskull , 15-Окт-07 12:50 
>Как с помощью echo вывести могострочный текст типа :
>
>строка1
>строка2
>строка3
>
>именно в таком виде с переводами строки, а то echo не выводит
>по умолчанию перевод строки и выдаёт:
>
>строка1 строка2 строка3

ну, это не проблема: echo "`cat 3.dat`"

проблема в том, что eval уже этого не поймет.
так что, придется менять на что-то вроде:
cat 2.dat 3.dat | while read str ; do eval echo $str; done



"Программирование Shell"
Отправлено Voblin , 15-Окт-07 14:05 
Вобщем сделал так:

#!/bin/bash
cat > 4.dat < 2.dat
cat >> 4.dat < 3.dat
aaa="`cat 4.dat`"
echo "$aaa"
>4.dat echo "${aaa//'$a'/Путь1}"

aaa="`cat 4.dat`"
>4.dat echo "${aaa//'$b'/Путь2}"

т.к. у меня переменных с путями несколько штук, то так будет проще.