ubuntuusers.de

aus einem Skript ein anderes Skript schreiben

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.10 (Yakkety Yak)
Antworten |

rs1302

Anmeldungsdatum:
4. Februar 2016

Beiträge: Zähle...

Hallo, ich möchte aus einem "Sh" Shell Skript eine Datei "test.gcom" anlegen und mit Befehlen befüllen. Direkt mit "echo" funktioniert es nicht, da die Befehle als Befehle erkannt werden. Wie kann man Befehle bzw Text so "maskieren", sodaß der Text ohne Beachtung des Inhalts in eine neue Datei 1:1 geschrieben wird?

Der Code soll Teil eines längeren Skripts werden, das TestX.gcom Dateien benötigt und zu Beginn des Skripts bzw bei Bedarf die benötigte Datei selbstständig anlegt, sodaß ein User diese Datei nicht händisch anlegen muß.

mit CAT gehts nicht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/sh
cat > /root/acat.gcom
opengt
set com 115200n81
set com 115200n81
set comecho off
set senddelay 0.01
waitquiet 0.1 0.1
flash 0.1

:start
send AT^^HFREQINFO?^m
get 1  
print 

:continue
exit 0
<EOF>

Mit echo geht es nur über Umwege. Ich setzte vor jede Zeile ein "\" und ein "-" bei "exit 0". Dann mit sed die Zeichen "\" und "-" nacheinander entfernen. Bei dieser Datei geht es so gerade noch. Diese Methode wirkt jedoch weder elegant noch richtig. Dazu bin ich mir nicht sicher, ob die Befehle nicht schon beim "umschreiben" ausgeführt werden. das sollten sie natürlich nicht!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
rm -r /root/aaa.gcom
echo > /root/aaa.gcom
echo "opengt" >> /root/aaa.gcom
echo "\set com 115200n81" >> /root/aaa.gcom
echo "\set com 115200n81" >> /root/aaa.gcom
echo "\set comecho off" >> /root/aaa.gcom
echo "\set senddelay 0.01" >> /root/aaa.gcom
echo "\waitquiet 0.1 0.1" >> /root/aaa.gcom
echo "\flash 0.1" >> /root/aaa.gcom
echo  >> /root/aaa.gcom
echo "\:start" >> /root/aaa.gcom
echo "\send "AT^^HFREQINFO?^m"" >> /root/aaa.gcom
echo "\get 1 "" $s" >> /root/aaa.gcom
echo "\print $s" >> /root/aaa.gcom
echo  >> /root/aaa.gcom
echo "\:continue" >> /root/aaa.gcom
echo "\exit-0" >> /root/aaa.gcom
sed  -i 's/\\//g' /root/aaa.gcom
sed -i 's/-/ /g' /root/aaa.gcom

Gibt es eine meta String-kombination die eingeschlossenen Text vollkommen unverändert übergibt - in diesem Fall an eine Datei, ohne ihn zu beachten oder auszuführen?

In weiterer Folge werde ich aus diesem Codeteil eine Funktion machen, die mehrmals mit unterschiedlichen "send: AT^^xxxx^m" Befehlen aufgerufen werden soll um Dateien anzulegen. Also Zb Zeile 13 als Variable z13 definieren, die beim Aufruf als $z13 mit dem entsrpechendem Befehl an die Funktion an der entsprechenden Stelle übergeben wird. Das meine "echo -sed" Kombination dann noch reibungslos funktioniert bezweifle ich sehr.

Hat jemand einen Tipp für mich? lg Roland

MisterIgo

Anmeldungsdatum:
23. April 2009

Beiträge: 947

Entweder:

#!/bin/sh

cat > /root/acat.gcom << EOF
This is a text.

exit
set
bla
EOF

oder

#!/bin/sh

> foobar.txt
echo 'This is a text.' >> foobar.txt
echo >> foobar.txt
echo 'exit' >> foobar.txt
echo 'set' >> foobar.txt
echo 'bla' >> foobar.txt

Wobei echo die nachfolgenden Wörter als Argumente ansieht und die nicht interpretiert. Also

echo exit >> foobar.txt

geht auch. Der Unterschied macht sich bei sowas bemerkbar:

echo exit  0
echo 'exit  0'
Antworten |