ubuntuusers.de

unter emacs Dateien tauschen

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

blueeyes

Anmeldungsdatum:
10. Dezember 2015

Beiträge: 4

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

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

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...

blueeyes schrieb:

Darf aber nicht mehr als 6 Zeilen benutzen und die 1. und 6. Zeile ist mit echo zu belegen.

Darfst du ";" oder "&&" in den Zeilen verwenden, um mehrere Befehle hintereinander zu hängen?

Desweiteren darf ich nur 2 cp 1 rm und 1 mv Befehl benutzen!

Das ist ja nicht schwer - das Grundgerüst ohne Variablendeklaration könnte z.B. so aussehen:

1
2
3
4
5
echo "Tausche A und B"
cp "$A" "$A.tmp"
cp "$B" "$A"
mv "$A.tmp" "$B"
echo "Fertig"

Die Frage ist eher, woher man die Namen der Dateien bekommt, die vertauscht werden sollen.

blueeyes

(Themenstarter)

Anmeldungsdatum:
10. Dezember 2015

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!

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

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.

blueeyes schrieb:

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!

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 😉

blueeyes

(Themenstarter)

Anmeldungsdatum:
10. Dezember 2015

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

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

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.

blueeyes

(Themenstarter)

Anmeldungsdatum:
10. Dezember 2015

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

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11261

Wohnort: München

blueeyes schrieb:

Im Anhang ist mein Shell -Screen!

Ich sehe da keinen Anhang - Text kann man einfach kopieren und hier in einem Code-Block (also in drei geschweifte Klammern eingefasst) posten.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

1
2
3
4
5
6
echo
cp da1 da3
cp da3  ~/linustest/unt_1/da2
mv ~/linustest/unt_1/da2 da1
rm da3
echo

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.

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

cp da1 da3
cp da3 ~/linustest/unt_1/da2
mv ~/linustest/unt_1/da2 da1
rm da3
  1. du kopierst da1 nach da3

  2. du kopiert da3(=da1) nach da2 – da hast du schon verloren, da2 ist jetzt nämlich weg bzw. da2=da1

  3. du verschiebst da2 nach da1 – damit auch der name von da2 nicht mehr auftaucht in der dateiliste...

  4. du löschst 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.

Antworten |