script mit script erstellen

dosenfleisch

dosenfleisch

Foren As
hallo,

ich schreibe gerade ein bash script, das unter anderem ein neues script erstellt und ausführbar macht.

nun werden aber bei der erstellung die befehle für script 2 bereits in script 1 ausgeführt und das ergebnis in script 2 geschrieben.

Wie "neutralisiere" ich die befehle, sodaß sie im script 2 aber abgearbeitet werden können?

zur verständlichkeit hier ein beispiel:

Code:
echo -e "#!/bin/bash\nwhile :  ; do\nuser=$(whoami)\necho "$whoami"\nsleep 1\ndone\" > ~/.kde/Autostart/echo.sh
 
Ersetz mal beim echo die " durch ' dann sollte das klappen ;)

Code:
echo -e '#!/bin/bash\nwhile :  ; do\nuser=$(whoami)\necho "$whoami"\nsleep 1\ndone\'
 
Bitte formatiere das doch etwas leslicher..
Code:
echo -e "
#!/bin/bash\n
while :  ; do\n
  user=$(whoami)\n
  echo "$whoami"\n
  sleep 1\n
done\" > ~/.kde/Autostart/echo.sh
Jetzt siehst du vielleicht auch das Problem: du hast Gänsefüsschen drin und nicht escaped. Zudem verstehe ich nicht ganz, was das Script bezwecken soll, dass es dynamisch erstellt werden muss?

Alternativ machst du eine "template-script" Datei, in welcher du mit sed notwendige Konstanten / Variablen ersetzt.
 
@LOs3r
dankesehr, das war's!

@trOnix
das script hier war nur ein beispiel.
daß das ganze extrem unleserlich ist, sah ich auch, mir war nur nicht bewußt, daß ich es nicht in eine zeile schreiben muß.

danke!
 
Kein Problem, wie gesagt, normalerweise erstellt man ja Scripts, weil irgendwelche Daten darin geändert werden müssen. Wenn du jedoch einzelne Teile in einem Script geändert haben möchtest, schreibst du das Script besser so, dass es sich durch eine Konfigurationsdatei editieren lässt.

Ganz primitiv geht das, indem du eine Datei "sourcest". Beispielsweise kannst du in eine Datei - sagen wir test_config folgendes schreiben:
Code:
NAME=tr0nix

... anschliessend kannst du diese Sourcen:
Code:
. test_config
... und kannst nun $NAME zugreifen:
Code:
echo $NAME

Es ist nun natürlich einfacher, eine Datei im Styl von "wert=value" zu erstellen, als ganzen Code.

Gruess
Joel
 
@tr0nix
kannst du mir das bitte noch einmal erklären. es scheint, es wäre was neues für mich und ich würde es gern verstehen.
leider hast du in zwei deiner sätze kein verb, sodaß ich nicht weiß, was es mit der datei sourcest auf sich hat und was ich anschließend mit "diesen sourcen" tun soll.

ich erstelle eine datei, die werte nach dem muster wert=000 beinhaltet. wie greife ich da nun in deinem beispiel darauf zu? und bekomme es dann in die variable $wert?
ich hätte das wahrscheinlich mit cat und einer while-schleife gemacht.

dazu muß ich aber noch klärend sagen, daß ich ein statisches neues script generieren wollte, daß es so vorher noch nicht gab und auch später nicht mehr verändert werden soll.
aber bitte erkläre dennoch dein beispiel noch einmal.
 
Hallo
Der Punkt ist das Gleiche wie der Befehl source.
Das inportiert eine Datei in den Namspace der aktuellen Shell.
Wenn du darin in gültiger Syntax Variablen oder Funktionen definierst, werden diese in die aktuelle Shell importiert.
Bestehende werden damit überschrieben. (Es sei denn sie sind read only).

Du kannst in der bash sogar das laufende Script verändern, oder erweitern.
Dazu mal diesen kleinen Spaß:
Code:
#!/bin/bash
anz=5;
echo "Ich bin das Orginal"
for (( i=$anz;$i > 1 ; ((i--)) ));do
echo 'for (( i=$anz;$i > 1 ; ((i--)) ));do \
echo "Ich bin nicht das Orginal!";\
done';
done >> $0
echo Ende Orginal;
Probier es aus.
;)
Gruß Wolfgang
 
das ist ja eine feine sache. kannte ich gar nicht.
somit hat tr0nix auch keine probleme mit dem satzbau ;)
jetzt verstehe ich seinen post erst richtig.
 
Zuletzt bearbeitet:

Ähnliche Themen

Switche abfragen über Script

batch script funktioniert nicht ...brauche hilfe

NAS-Drive Mount in Bash-Script über crontab

script sshpass

Grafische Anzeige der Temperatur

Zurück
Oben