Datei erstellen, Name und Inhalt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Jintonic
Beiträge: 2
Registriert: 15.01.2020 23:21:55

Datei erstellen, Name und Inhalt

Beitrag von Jintonic » 15.01.2020 23:30:56

Hallo,
ich soll eine Datei erstellen mit dem Inhalt "!!abc--def!!" und ich soll sie "--$$?!!; rm -rf *;" nennen.

Das mit dem Inhalt habe ich verstanden, echo "\!\!abc--def\!\!" > Hallo (zum Beispiel). In der Datei steht nun \!\!abc--def\!\!, ist wohl aber in der Form richtig, anders geht es nicht, oder?
Nur bei dem Namen habe ich Probleme, wie kann ich $, rm, -rf usw. verstecken? Oder ist das gar nicht möglich?


Danke schonmal im Voraus,
Jintonic

Benutzeravatar
hikaru
Beiträge: 10851
Registriert: 09.04.2008 12:48:59

Re: Datei erstellen, Name und Inhalt

Beitrag von hikaru » 16.01.2020 00:02:35

Hier ist ein Troll am Werk - entweder du selbst, oder derjenige, der dir diese Aufgabe gestellt hat.
Keiner der bei Verstand ist, wird jemals so einen Dateinamen anlegen wollen - technisch Unbedarfte deshalb nicht, weil er keinen Sinn ergibt, technisch Versierte deshalb nicht, weil er potenziell gefährlich ist. [1]
Sollte die Aufgabe Teil einer Schulübung sein, dann ist die Lösung nicht die Erstellung der Datei sondern die Erkenntnis der Unsinigkeit der Aufgabenstellung.

[1] https://xkcd.com/327/

Jintonic
Beiträge: 2
Registriert: 15.01.2020 23:21:55

Re: Datei erstellen, Name und Inhalt

Beitrag von Jintonic » 16.01.2020 03:20:26

Über den Sinn lässt sich natürlich streiten, es war aber tatsächlich eine Klausuraufgabe in meinem Studium :)
Achja, die Maskierung soll natürlich so schwach wie möglich sein.
Ich glaube ich bin zu der Lösung gekommen:

echo "\!\!abc--def\!\!" > '--$$?!!; rm -rf *;'

Hat jemand vielleicht eine schwächere Maskierung als Lösung?

Benutzeravatar
niemand
Beiträge: 13286
Registriert: 18.07.2004 16:43:29

Re: Datei erstellen, Name und Inhalt

Beitrag von niemand » 16.01.2020 07:46:17

Code: Alles auswählen

echo "\!\!abc--def\!\!" > '--$$?!!; rm -rf *;'
'!!abc--def!!'

Wozu auch immer das gut sein soll. Zumindest den zweiten Teil hätte man auch ohne das dann doch stinkende rm -rf vermitteln können. Und wenn der nächste Teil das Löschen der Datei sein soll, hilft in den meisten Shells (deren Benennung hier offensichtlich vergessen wurde, obwohl sie für die Lösung wichtig ist) die Tabulator-Taste.

Den Unterschied zwischen '' und "" findest du in der Manpage der von dir verwendeten Shell, und im Fall der Bash in jedem popeligen Anfänger-HowTo.
non serviam.

Benutzeravatar
Meillo
Moderator
Beiträge: 5587
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Datei erstellen, Name und Inhalt

Beitrag von Meillo » 16.01.2020 09:09:39

niemand hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 07:46:17
Zumindest den zweiten Teil hätte man auch ohne das dann doch stinkende rm -rf vermitteln können.
Das finde ich auch fahrlaessig. *Viel* zu gefaehrlich als dass das ein verantwortungsvoller Aufgabensteller einbauen wuerde ... und dann auch noch mit `-r' und `-f'. ... Demonstration geht auch ohne Selbstzerstoerungsgefahr.
Use ed(1) once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 5587
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Datei erstellen, Name und Inhalt

Beitrag von Meillo » 16.01.2020 09:20:59

Jintonic hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 03:20:26
Achja, die Maskierung soll natürlich so schwach wie möglich sein.
Wie schon in einem anderen Thread (den ich leider nicht mehr finde) mal diskutiert, kann man die drei Quoting-Mechanismen in der Shell nicht sortieren, zumindest der Backslash ist einfach anders als Single- und Double-Quotes. Die Anforderung, die du beschreibst -- ``so schwach wie moeglich'' -- finde ich unsinnig. Ich finde es in der Praxis egal wie man quotet, solange es korrekt ist. Zudem sind in Double-Quotes Backslashes je nach verwendeter Shell in unterschiedlicher Weise noetig. Ausrufezeichen, beispielsweise, muessen bzw. duerfen gar nicht unbedingt gequotet werden. Hier auf meinem System in der mksh:

Code: Alles auswählen

B-) echo "\!\!abc--def\!\!"
\!\!abc--def\!\!

B-) echo "!!abc--def!!"    
!!abc--def!!

B-) echo !!abc--def!!  
!!abc--def!!

B-) echo \!\!abc--def\!\!
!!abc--def!!
Dagegen in der Bash:

Code: Alles auswählen

$ date
Thu Jan 16 09:24:08 CET 2020

$ echo !!abc--def!!
echo dateabc--defdate
dateabc--defdate
... ruft `!' die History-Expansion auf und `!!' wird durch das vorherige Kommando (hier `date') ersetzt.


In Summe haben wir hier also eine schlechte Aufgabe ... bei der man vermutlich am besten das hinschreibt, was der Aufgabensteller vermutlich lesen will, ohne rumzudiskutieren, weil er es vermutlich nicht verstehen wird. Ich habe damit selber auch Erfahrungen gemacht. Am besten Augen zu und durch ... :roll:
Use ed(1) once in a while!

Benutzeravatar
hikaru
Beiträge: 10851
Registriert: 09.04.2008 12:48:59

Re: Datei erstellen, Name und Inhalt

Beitrag von hikaru » 16.01.2020 10:44:40

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 09:20:59
In Summe haben wir hier also eine schlechte Aufgabe ... bei der man vermutlich am besten das hinschreibt, was der Aufgabensteller vermutlich lesen will, ohne rumzudiskutieren, weil er es vermutlich nicht verstehen wird. Ich habe damit selber auch Erfahrungen gemacht. Am besten Augen zu und durch ... :roll:
Das mag für den Einzelnen in der konkreten Situation tatsächlich die einfachste Lösung sein, halte ich aber im Allgemeinen für eine schlechte Lösungsstrategie.
Ziel einer Bildungseinrichtung (und deren Angestellten) sollte es sein, den zu Bildenden korrektes*(!) Wissen zu vermitteln.** Schlechte (hier: gefährliche) Übungsaufgabenstellungen laufen diesem Ziel zuwider und sind daher abzustellen.
Wer als Schüler/Student so eine schlechte Aufgabenstellung erkennt, sollte im Interesse seiner (aktuellen und zukünftigen) Mitschüler/Kommilitonen darauf hinarbeiten, diesen Zustand abzustellen. Das mag erstmal unbequem sein, weil man sich als "Untergebener" in der Situation nicht in der Position wähnt, die Autorität des Lehrers/Dozenten anzugreifen, aber Autoritätshörigkeit ist hier fehl am Platz.

Ich selbst hatte so eine Situation mal im Physikunterricht (8. Klasse?). Da vermittelte der Lehrer den Eindruck, dass der Mond keine Eigenrotation besäße.*** Was er dabei nicht berücksichtigt hatte war, dass das aufgrund der gebundenen Rotation eine Frage des Bezugssystems (geozentrisch vs. z.B. heliozentrisch) ist. Wir haben letztendlich eine ganze Unterrichtsstunde damit verbracht, eben diesen Aspekt zu erörtern.
Vor ein paar Jahren kam das Thema beim Schwelgen in Erinnerungen auf einer Grillparty bei meinen Nachbarn auf. Die Nachbarin, welche wenige Jahre älter ist als ich und die selbe Schule besuchte, war auch mit Ü30 noch der Ansicht, dass der Mond "feststehe". Ihr Bruder, etwas jünger als ich, sah das differenzierter.


*) Natürlich nach "aktuellem Stand der Technik/Wissenschaft/etc."
**) Hat sie dieses Ziel nicht, dann entsorgt sie selbst ihre Daseinsberechtigung.
***) Libration mal außen vor

Benutzeravatar
Meillo
Moderator
Beiträge: 5587
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Datei erstellen, Name und Inhalt

Beitrag von Meillo » 16.01.2020 11:20:50

hikaru hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 10:44:40
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 09:20:59
In Summe haben wir hier also eine schlechte Aufgabe ... bei der man vermutlich am besten das hinschreibt, was der Aufgabensteller vermutlich lesen will, ohne rumzudiskutieren, weil er es vermutlich nicht verstehen wird. Ich habe damit selber auch Erfahrungen gemacht. Am besten Augen zu und durch ... :roll:
Das mag für den Einzelnen in der konkreten Situation tatsächlich die einfachste Lösung sein, halte ich aber im Allgemeinen für eine schlechte Lösungsstrategie.
Ziel einer Bildungseinrichtung (und deren Angestellten) sollte es sein, den zu Bildenden korrektes*(!) Wissen zu vermitteln.** Schlechte (hier: gefährliche) Übungsaufgabenstellungen laufen diesem Ziel zuwider und sind daher abzustellen.
Bezogen auf das ``rm'', ja. Das sollte man unbedingt kritisieren und verhindern, dass es zukuenftig weiter auftaucht.

Meine Aussage bezog sich mehr auf das schwaechere oder staerkere Quoting. Da wird IMO ein Konzept der Ordnung vermittelt, das nicht der Realitaet entspricht, zudem ist die Aufgabe Shell-Abhaengig, weswegen IMO nicht auf Quoting-Details wert gelegt werden sollte. Das sind mehr Fragen des Verstaendnismodells, der Perspektive, des Stils ... und damit schlecht auf ``korrektes Wissen'' abbildbar. Dagegen kann man, meiner Erfahrung nach, kaum angehen, weil diejenigen, die die schlechten Aufgaben stellen oft kein groesseres Wissen haben und zudem oft (deswegen) auch an Selbstwert mangeln. Sachliche Argumentation wird dann schnell emotional und besserwisserisch aufgefasst ... so wie der Uebungsleiter, der mir damals bei einer Aufgabe mit freier Programmiersprachenwahl die Haelfte der Punkte abgezogen hat, wegen fehlender Kommentare in meinem absolut typischen 120-Zeilen C-Code, den er als Java-Programmierer eben nicht verstanden hat. Da war auch nichts los mit einer Argumentation, dass ``fehlende Kommentare'' kein Kriterium sein duerfen. Der Code war in seiner Art Community-typisch, das Problemloesungsverfahren war bekannt, das Programm war kurz ... an der Verstaendlichkeit kann es nicht grundsaetzliche gemangelt haben.

Im konkreten Fall also auf das Thema ``schwaches Quoting'' und Shell-Abhaengigkeit einzusteigen halte ich fuer wenig erfolgreich. Der Aufgabensteller wird das Thema vermutlich selber nicht tiefer durchdrungen haben, weil er sonst ein anderes Denkmodell vermitteln wuerde (das den Begriff ``schwach'' und die implizierte Ordnung (``moeglichst schwaches Quoting'')) aussen vor laesst. Auf die Shell-Abhaengigkeit wird vermutlich nur die Entgegnung kommen, dass die Uebungen mit Bash Version XY konzipiert sind. Punkt. Ende der Diskussion. Beim Thema Shell-Programmierung IMO aber eine schlechte Haltung, weil die Realitaet dort die Heterogenitaet ist. Shell-Umgebungen sind normalerweise vielfaeltig. Sich dort auf eine Version festzulegen finde ich recht weltfremd.

Langer Rede kurzer Sinn: Falsch Fakten oder Gefahr (z.B. `rm') sollten zu Anmerkungen fuehren. Bei zu kurzsichtigen Gedankenmodellen wuerde ich nur dann etwas sagen, wenn ich den Eindruck habe, dass der Aufgabensteller dafuer offen und interessiert ist.
Use ed(1) once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 5587
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Datei erstellen, Name und Inhalt

Beitrag von Meillo » 16.01.2020 13:02:11

Jintonic hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 03:20:26
Achja, die Maskierung soll natürlich so schwach wie möglich sein.
Das laesst mich immer noch nicht in Ruhe. Das ist ... hmm ... Schwachsinn.

In der Praxis wuerde ich es stets mit Single-Quotes machen:

Code: Alles auswählen

echo '!!abc--def!!' > '--$$?!!; XX -rf *;'
Der Grund ist, dass diese Form in diesem Fall die zuverlaessigste ist. Die Regeln sind einfach, ich muss ueber nichts nachdenken, es gibt keine offenen Fragen, keine unklaren Stellen. Darum ist fuer mich eindeutig, dass ich dieser Form in der Praxis stets den Vorzug geben wuerde.

Falls es um Robustheit in Scripten geht, sollte man vielleicht von `echo' auf `printf' wechseln, weil das nicht irgendwelche obskuren Interpraetationen im String macht:

Code: Alles auswählen

printf '%s\n' '!!abc--def!!' > '--$$?!!; XX -rf *;'
(Btw: Wenn man die Aufgabe genau liest, wird moeglicherweise nichts bezueglich des Newlines gesagt, das z.B. `echo' automatisch anfuegt. Aber da mir die Originalaufgabe nicht zur Verfuegung steht, bleibt das Spekulation.)


Die Quoting-Moeglichkeiten einzuschraenken scheint mir eine beliebte akademische Aufgabenstellung zu sein. Ich finde sie praxisfern. Das Schoene an den Buechern von Kernighan ist, dass er nie akademische Beispiele bringt, sondern immer an der Praxis ansetzt. Wenn man also das Verstaendnis von verschiedenen Quoting-Arten testen will, dann sollte man dazu passende praxisnahe Aufgaben stellen. Wenn man will, dass die Studenten Double-Quotes verwenden, muss man ja nur Single-Quotes in den String packen:

Code: Alles auswählen

echo "!!abc-'-def!!"
Und wenn man verhindern will, dass Backslashes verwendet werden, dann macht man den String einfach voll mit zu escapenden Zeichen und Zeichen, die moeglicherweise zu Fehlern fuehren, wie `t' was als `\t' als Tab interpraetiert werden kann oder `\', was entweder literal oder als Escape fuer das folgende Zeichen stehen kann.

Das waeren praxisnahe Qualitaetsaufgaben, bei denen die Studenten automatisch die richtigen (oder gerne auch andere, funktionierende) Techniken anwenden muessen, um die Aufgabe zu bewaeltigen. Die unterschiedlichen Loesungen kann man dann diskutieren.

Aber wir sollten in der Lehre wegkommen von den akademischen Sandkastenproblemstellungen ... die dann auch noch windschiefe Konzepte vermitteln.
Use ed(1) once in a while!

Benutzeravatar
hikaru
Beiträge: 10851
Registriert: 09.04.2008 12:48:59

Re: Datei erstellen, Name und Inhalt

Beitrag von hikaru » 16.01.2020 14:44:22

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 13:02:11
Aber wir sollten in der Lehre wegkommen von den akademischen Sandkastenproblemstellungen ... die dann auch noch windschiefe Konzepte vermitteln.
:THX:

KP97
Beiträge: 1958
Registriert: 01.02.2013 15:07:36

Re: Datei erstellen, Name und Inhalt

Beitrag von KP97 » 16.01.2020 15:07:41

@Meillo
Warum verschiebst Du diesen Beitrag nicht ins dafür vorgesehene Forum?
Der TE sucht ja kein Programm, sondern nach einer Möglichkeit in seinem Script.

Benutzeravatar
Meillo
Moderator
Beiträge: 5587
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Datei erstellen, Name und Inhalt

Beitrag von Meillo » 16.01.2020 15:44:32

KP97 hat geschrieben: ↑ zum Beitrag ↑
16.01.2020 15:07:41
@Meillo
Warum verschiebst Du diesen Beitrag nicht ins dafür vorgesehene Forum?
Der TE sucht ja kein Programm, sondern nach einer Möglichkeit in seinem Script.
Danke, das ist ein guter Hinweis. Ist mir gar nicht aufgefallen.

(Ich nutze das Forum seit rund einem Monat nur mit w3m, da ist die Information, in welchem Forum sich ein Thread befindet, nicht auf den ersten Blick ersichtlich wie in der grafischen Darstellung. Erfreulicherweise laesst sich das ganze Forum mit w3m benutzen, nur die Uebersichtlichkeit leidet ein bisschen.)
Use ed(1) once in a while!

Antworten