Hallo zusammen! Ich habe ein kleines Problem mit einem Shell-Script in emacs! Ich soll 2 Dateien tauschen und beim nächsten Aufruf soll alles wieder in seinem normalen Zustand zurückversetzt werden! Darf aber nicht mehr als 6 Zeilen benutzen und die 1. und 6. Zeile ist mit echo zu belegen. Desweiteren darf ich nur 2 cp 1 rm und 1 mv Befehl benutzen! Ich bekomme es einfach nicht hin wie das funktionieren soll. Wäre klasse wenn jemand mir da helfen könnte. Danke im Vorraus
unter emacs Dateien tauschen
Antworten |
Anmeldungsdatum: Beiträge: 4 |
|
||
Anmeldungsdatum: Beiträge: 11261 Wohnort: München |
Irgendwie ist mir nicht klar, weshalb du ein Shell-Skript für emacs brauchst - das skriptet man doch normalerweise in Lisp...
Darfst du ";" oder "&&" in den Zeilen verwenden, um mehrere Befehle hintereinander zu hängen?
Das ist ja nicht schwer - das Grundgerüst ohne Variablendeklaration könnte z.B. so aussehen:
Die Frage ist eher, woher man die Namen der Dateien bekommt, die vertauscht werden sollen. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 4 |
Die Aufgabenstellung ist folgende: Im Unterverzeichnis X/y ist Datei2 enthalten. Im Unterverzeichnis X ist Datei1 enthalten. Schreibe das Shell-Script "tausch" das die Datei1 unter dem Namen Datei2 in das Unterverzeichnis X/Y überträgt und die Datei2 unter dem Namen der Datei1 in das Unterverzeichnis X überträgt. Vorher Datei1 Datei2 Nachher: Inhalt von Datei2 unter dem Namen Datei1 und Inhalt von Datei1 unter dem Namen Datei2. Bedeutet der Inhalt beider Dateien soll getauscht werden und beim nächsten Aufruf wieder in den original Zustand zurückversetzt werden. Randbedingungen : Das Shell-Script muss auch funktionsfähig sein,wenn es von einem beliebigen Verzeichnis aus aufgerufen wird. Und ob ich "," oder && weiß ich nicht,aber mit "," wäre die Hilfe lieber ausser mit && gibt es eine kürzere Lösung!Danke im Vorraus! P.s: Die Dateien mit dem Textinhalt lege ich mit cat 》Datei1,Return,text, 2x Return und Strg+d an!Und wir lernen mit emacs deshalb kann ich im Moment nichts anderes benutzen! |
||
Anmeldungsdatum: Beiträge: 11261 Wohnort: München |
Woran hängt des dann jetzt noch? Dann setzt du halt absolute Pfade zu den Dateien ein (entweder als Wertzuweisung für die Variablen oder als Ersatz) und fertig.
Interessante Methode cat zu benutzen - alternativ geht das übrigens auch mit echo: echo "Mein Text" >> Datei1 oder einfach mit emacs, denn genau für sowas sind Texteditoren ja da 😉 |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 4 |
Habe ich ja gemacht aber ich bekomme immer die Meldung: cp: der Aufruf vom stat für 》$《 ist nicht möglich Datei oder Verzeichnis nicht gefunden. Und das bei allen befehlsfolgen obwohl alle Dateien da sind wo sie hingehören. Ich finde aber auch den Fehler nicht! Ist im Moment zum Haare raufen ☹ !Und danke für deine Geduld |
||
Anmeldungsdatum: Beiträge: 11261 Wohnort: München |
Zeig doch mal wie dein Skript jetzt aussieht - das Dollar-Zeichen benötigst du nur, um an den Wert einer definierten Variablen zu kommen, wenn du stattdessen einen normalen Pfad einträgst natürlich nicht. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 4 |
Im Anhang ist mein Shell -Screen! So habe ich es gemacht und dabei die Randbedingungen eingehalten aber es geht immer noch nicht! Irgendwo habe ich einen Fehler und übersehe ihn. P.s: Danke für deine Zeit echo cp da1 da3 cp da3~/linustest/unt_1/da2 mv ~/linustest/unt_1/da2 da1 rm da3 echo Und da hänge ich |
||
Anmeldungsdatum: Beiträge: 11261 Wohnort: München |
|||
![]() Anmeldungsdatum: Beiträge: 17621 Wohnort: Berlin |
Du kopiierst da1 nach da3. Dann da3, was da1 ist, nach da2. Da2 ist jetzt endgültig verloren - hoffentlich war es nicht schade drum. Dann da2, was jetzt identisch ist mit da1 und da3 zu da1. |
||
![]() Anmeldungsdatum: Beiträge: 7790 |
cp da1 da3 cp da3 ~/linustest/unt_1/da2 mv ~/linustest/unt_1/da2 da1 rm da3
Das hättest du auch einfacher haben können, dein Script läßt sich auch so schreiben: rm da2 kommt aufs gleiche raus. Mal von den statischen Pfadangaben und scheinbar fehlenden Shell-Grundkenntnissen usw. mal ganz abgesehen hast du da einfach Logikprobleme in deinem Script. Um das zu verstehen bleibt dir nichts übrig als das selbst Schritt für Schritt zu machen und dir nach jedem Schritt genau anzuschauen was jetzt eigentlich grad los ist. Alternativ kannst du dir dazu auch einfach Debugmeldungen in dein Script einbauen. Keine Debugmeldungen zu haben ist ein Anfängerfehler, selbst Profis brauchen diese, denn vom davorsitzen und nanu-geht-nicht dumm aus der Wäsche gucken kommt man nicht auf eine funktionierende Lösung. |