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