forked from blinry/nutsh-vorkurs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6-rmdir-rm.nutsh
102 lines (78 loc) · 3.39 KB
/
6-rmdir-rm.nutsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
lesson_name("Dateien und Ordner löschen - rmdir, rm")
make_home
run("touch wohnzimmer/datei.txt")
"Nachdem wir neulich Ordner und Dateien angelegt haben (mit `mkdir` und `touch`), lernen Sie heute, wie man diese wieder löscht."
"Zum Löschen einer Datei benutzen Sie `rm` (\"remove\"). Löschen Sie doch beispielsweise mal die `datei.txt` im Wohnzimmer."
prompt {
if ! file("$ROOT/wohnzimmer/datei.txt") {
expect("rm wohnzimmer/datei.txt")
break
} else {
expect(" ")
}
}
"[Eine Ratte huscht durchs Zimmer]"
run(`touch "$ROOT"/wohnzimmer/ratte "$ROOT"/toilette/nasse_ratte "$ROOT"/schlafzimmer/ratte "$ROOT"/küche/esszimmer/dicke_ratte "$ROOT"/schrank/ratte1 "$ROOT"/schrank/ratte2 "$ROOT"/schrank/ratte3`)
"Whoa, bei Ihnen ist wohl eine Ungezieferplage ausgebrochen! Überall in der Wohnung sind Nagetiere aufgetaucht! Suchen und *vernichten* Sie alle!"
prompt {
if run(`find "$ROOT" | grep ratte`) == "" {
expect("rm */*ratte*; rm küche/esszimmer/*ratte")
break
} else {
expect(" ")
}
if help {
expect("echo help")
"Der Befehl `find ~/.nutsh` listet alle Dateien und Verzeichnisse in Ihrem \"Haus\" auf, das hilft Ihnen vielleicht, die restlichen Ratten zu finden."
}
}
"Das war die letzte. Puh."
"Was mit `rm` gelöscht wurde, ist nur sehr schwer bis unmöglich wiederherzustellen - mit dem Befehl müssen Sie also ein wenig aufpassen. UNIX-Systeme erwarten von Ihnen, dass Sie wissen, was Sie tun! :-)"
"Als nächstes löschen wir Ordner, das geht mit `rmdir` (\"remove directory\"). Aus Sicherheitsgründen funktioniert dies nur mit leeren Ordnern, sie müssen alle Inhalte also vorher bereits entfernt haben."
"Entsorgen Sie doch beispielsweise mal den leeren Pizzakarton in der Küche."
run(`mkdir "$ROOT/küche/pizzakarton"`)
prompt {
if ! dir("$ROOT/küche/pizzakarton") {
expect("rmdir küche/pizzakarton")
break
}
}
"Wenn das doch immer so einfach wäre."
"Eine etwas größere Aufgabe: In Ihrem Flur steht nun eine Kiste - bitte entfernen Sie diese und ihren Inhalt unter Zuhilfenahme von `rm` und `rmdir`. Sie müssen Sich dabei von innen nach außen vorarbeiten, da `rmdir` nur leere Ordner löscht."
def create_box {
run("cd $ROOT")
run("mkdir kiste")
run("mkdir kiste/dose")
run("touch kiste/dose/kekskrümel")
run("mkdir kiste/ordner")
run("touch kiste/ordner/steuerbescheid")
run("touch kiste/ordner/werbeflyer")
run("cd -")
}
create_box
prompt {
if ! dir("$ROOT/kiste") {
expect(`rm -rf "$ROOT/kiste"`) // minor cheat
break
}
}
"Geschafft! Das war nun natürlich sehr mühselig. Es gibt daher eine Möglichkeit, ein Verzeichnis mitsamt seinem kompletten Inhalt zu löschen: Schauen Sie mal, ob Sie in der Manpage von `rm` die Option dafür finden. Sollten Sie nicht fündig werden, gibt es mit `echo help` einen Tipp."
"Wir haben Ihnen wieder ein Kiste in den Flur gestellt - diese können Sie nun versuchen, mit einem einzgen Befehl zu löschen."
create_box
prompt {
if ! dir("$ROOT/kiste") {
expect(`rm -rf "$ROOT/kiste"`)
break
}
if help {
expect("echo help")
"Was Sie suchen, ist eine Option, die ein Verzeichnis und seine Inhalte *rekursiv* löscht."
}
}
"So weit, so gut. Mit `echo fertig` schließen Sie die Lektion ab."
prompt {
if ready {
expect("echo fertig")
break
}
}