Die Befehlszeile · Übung
Vor jeder Änderung nachsehen
Navigation bringt dich zu einem Pfad. Sie sagt nicht, was dort liegt. Ein Pfad kann eine Datei, ein Verzeichnis oder gar nichts benennen.
Bevor du etwas kopierst, verschiebst oder löschst, brauchst du zwei Fakten: Ist das eine Datei oder ein Verzeichnis, und was steckt darin? Diese Lektion beantwortet beides und schließt den Kreis, indem du eine eigene Datei schreibst. Dadurch können alle späteren Übungen Belege hinterlassen.
Eine Datei von einem Verzeichnis unterscheiden
Get-ChildItem
Die Spalte Mode liefert die Antwort: Ein Eintrag, der mit d beginnt, ist ein Verzeichnis. Get-Item gibt den einzelnen Eintrag an einem Pfad zurück. Das ist die enger gefasste Frage:
Get-Item -LiteralPath ./data/README.txt
-LiteralPath bedeutet „Verwende diesen Pfad genau wie geschrieben“. Das ist die richtige Wahl, wenn du den genauen Namen kennst. Besonders wichtig ist es, wenn ein Dateiname Zeichen enthält, die PowerShell sonst als Muster zum Finden mehrerer Dateien lesen würde. Ein späteres Kapitel erklärt diese Muster gezielt. Hier meinst du immer einen genauen Pfad.
ls -1F
Hier arbeiten zwei Optionen. -1 enthält die Ziffer Eins und verlangt einen Eintrag pro Zeile statt Spalten. -F fügt bestimmten Eintragsarten eine Markierung hinzu. Ein abschließender / bedeutet Verzeichnis:
README.md
checkpoint/
data/
destination/
environment-check.py
notes with spaces.txt
report.py
Die Namen haben sich nicht verändert. -F fügt nur die Markierungen hinzu. Du kannst außerdem in ein Verzeichnis hineinsehen, ohne hineinzuwechseln. Wenn du nur prüfst, ist das meistens genau richtig:
ls -1 data
ls -1F
Hier arbeiten zwei Optionen. -1 enthält die Ziffer Eins und verlangt einen Eintrag pro Zeile statt Spalten. -F fügt bestimmten Eintragsarten eine Markierung hinzu. Ein abschließender / bedeutet Verzeichnis:
README.md
checkpoint/
data/
destination/
environment-check.py
notes with spaces.txt
report.py
Die Namen haben sich nicht verändert. -F fügt nur die Markierungen hinzu. Du kannst außerdem in ein Verzeichnis hineinsehen, ohne hineinzuwechseln. Wenn du nur prüfst, ist das meistens genau richtig:
ls -1 data
Eine kurze Datei lesen
Get-Content -LiteralPath ./data/README.txt
Anführungszeichen halten einen Pfad mit Leerzeichen zusammen, genau wie im vorigen Kapitel:
Get-Content -LiteralPath './notes with spaces.txt'
cat data/README.txt
Ein Pfad mit Leerzeichen braucht Anführungszeichen. Sonst übergibt die Shell cat drei getrennte Argumente statt eines Dateinamens:
cat "notes with spaces.txt"
cat data/README.txt
Ein Pfad mit Leerzeichen braucht Anführungszeichen. Sonst übergibt die Shell cat drei getrennte Argumente statt eines Dateinamens:
cat "notes with spaces.txt"
Lesen ist auf beiden Wegen eine Form des Nachsehens, keine Bearbeitung. Die Datei bleibt genau, wie sie war. Ausführliche Berechtigungsspalten und Pipelines sind später nützlich. Für die beiden heutigen Fragen brauchst du sie nicht: Was benennt dieser Pfad, und was steht in dieser Datei?
Eine Datei aus der Shell schreiben
Festzuhalten, was du gefunden hast, ist die andere Hälfte des Prüfens. Jede bewertete Übung verlangt ab jetzt Belege. So hinterlässt du sie.
Set-Content -LiteralPath ./reading.txt -Value 'north: 12'
Add-Content -LiteralPath ./reading.txt -Value 'south: 9'
Get-Content -LiteralPath ./reading.txt
Set-Content schreibt die Datei von Anfang an und ersetzt alles, was bereits darin steht, ohne Warnung und ohne Rückgängig-Funktion. Add-Content hängt an das Vorhandene an. Einmal Set-Content zum Beginnen einer Datei, dann Add-Content für jede weitere Zeile.
echo "north: 12" > reading.txt
echo "south: 9" >> reading.txt
cat reading.txt
echo gibt aus, was du ihm übergibst. > leitet diesen Text statt auf den Bildschirm in eine Datei um. Keiner der beiden Befehle hat etwas auf dem Bildschirm ausgegeben, weil der Text in die Datei statt zu dir ging.
Verwende > bewusst. Es erstellt die Datei, falls sie fehlt, und ersetzt den gesamten Inhalt, falls sie bereits existiert, ohne Warnung und ohne Rückgängig-Funktion. Verwende >>, um eine Zeile anzuhängen. Einmal > zum Beginnen einer Datei, dann >> für jede weitere Zeile.
echo "north: 12" > reading.txt
echo "south: 9" >> reading.txt
cat reading.txt
echo gibt aus, was du ihm übergibst. > leitet diesen Text statt auf den Bildschirm in eine Datei um. Keiner der beiden Befehle hat etwas auf dem Bildschirm ausgegeben, weil der Text in die Datei statt zu dir ging.
Verwende > bewusst. Es erstellt die Datei, falls sie fehlt, und ersetzt den gesamten Inhalt, falls sie bereits existiert, ohne Warnung und ohne Rückgängig-Funktion. Verwende >>, um eine Zeile anzuhängen. Einmal > zum Beginnen einer Datei, dann >> für jede weitere Zeile.
Übung: Nachsehen und die Ergebnisse festhalten
Bewertet wird der Arbeitsbereich, beginnend bei /workspace. Verwende zuerst Reset, falls ein früherer Versuch destination/inspection.txt hinterlassen hat.
Bestätige, dass du bei
/workspacebist.Liste den Arbeitsbereich auf und bestimme, welche Einträge Verzeichnisse sind.
Liste
dataauf und bestätige, dass der vorbereitete BaumREADME.txtundmeasurements.txtenthält.Lies
data/README.txtund notiere den Wert nachmarker-name:.Lies
notes with spaces.txtmit dem Pfad in Anführungszeichen.Schreibe deine Ergebnisse in eine neue Datei unter
destination/inspection.txt. Sie braucht zwei Zeilen: zuerst den Markierungswert aus Schritt 4, danach die Anzahl der Einträge aus Schritt 3.Lies
destination/inspection.txtzurück und prüfe beide Zeilen, bevor du abgibst.
Bearbeite, verschiebe oder lösche keine bereitgestellte Datei. Die Prüfung verlangt destination/inspection.txt und überprüft, dass die bereitgestellten Belegdateien unverändert bleiben. Verwende zuerst Reset, damit fremde Überreste deine eigene Untersuchung nicht verwirren.
Wenn die beiden Zeilen in falscher Reihenfolge stehen, versuche nicht, die Datei auszubessern. Schreibe sie von Anfang an neu und ersetze alles. Das ist der eine Fall, in dem Überschreiben die einfache statt der gefährlichen Lösung ist.
Warum muss der Pfad beim Lesen von notes with spaces.txt in Anführungszeichen stehen?
Eine Datei log.txt enthält bereits eine Zeile. Du schreibst eine neue Zeile mit dem Befehl hinein, der eine Datei von Anfang an beginnt. Was enthält sie danach?
Du kannst eine Datei von einem Verzeichnis unterscheiden, eine Datei lesen und eine schreiben. Diese letzte Fähigkeit macht den Rest des Kapitels möglich: Ab jetzt kann jede Übung aussagekräftige Belege hinterlassen statt nur etwas, das existiert.