Herausforderung: Schreiben Sie ein Makefile, das zu folgendem Verhalten führen würde:
% make me a sandwich
What? Make it yourself
% sudo make me a sandwich
Okay
Regeln:
- Sollte auf einem Linux-Computer funktionieren, auf dem der Benutzer nicht root ist, sondern verwenden darf
sudo
. - Darf
Okay
zu keinem kürzeren make-Befehl sagen (zBsudo make sandwich
). - Der zweite Befehl sollte wegen funktionieren
sudo
, nicht weil es der zweite Aufruf ist.
Richtlinien:
- Fassen Sie sich kurz (schließlich handelt es sich um eine Code Golf-Site).
- Es wäre schön, wenn es tatsächlich ein Sandwich machen würde.
- Versuchen Sie klug zu verbergen, warum
sudo
das einen Unterschied macht.
Der Gewinner wird per Abstimmung ermittelt.
popularity-contest
ugoren
quelle
quelle
make
.Antworten:
Okay, ich werde beißen. Dies entspricht nicht unbedingt der Richtlinie Nr. 3, leistet jedoch bei den anderen beiden Richtlinien gute Arbeit. Es räumt auch nach sich selbst auf, wie es jeder gute Sandwichmacher sollte.
(Weniger fehlerhaft und hoffentlich ein bisschen weniger langweilig als meine ursprüngliche Vorlage.)
quelle
sudo make me sandwich
.&& test -e ./a
Eine relativ kompakte Lösung, die die Richtlinie 2 ignoriert (127 Zeichen, einschließlich unnötiger Leerzeichen). Ich folge der Praxis von breadbox, nach mir selbst aufzuräumen. Legen Sie keine andere Datei in dasselbe Verzeichnis wie das Makefile! Beachten Sie auch, dass das Makefile aufgerufen werden muss
Makefile
, andere Namen funktionieren nicht.Verwendung:
Ich mag die Art und Weise, wie diese mit Leitlinie Nr. 3 umgeht. Nur ein Druck auf Shiftmacht den Unterschied.
quelle
Diese Lösung entspricht nicht der Richtlinie Nr. 2 - oder zählt eine vage Sandwichform? Anfangs ging ich auf eine Art Palindrom-Thema ein, aber ich fand nur so viele Möglichkeiten, Linien symmetrisch zu machen, ohne auf Lahmheit zurückzugreifen
real code # ecod laer
. Ich habe Leitlinie Nr. 1 nicht sehr ernst genommen, da steht die Ästhetik an erster Stelle.Denken Sie daran, dass es sich um ein Makefile handelt. Die 3 aufeinanderfolgenden Zeilen beginnend mit
if
,rm
undecho
mit einer Lasche beginnen. Die anderen eingerückten Zeilen beginnen mit Leerzeichen.Verwendung (die Befehle können in beliebiger Reihenfolge ausgegeben werden):
Was Leitlinie Nr. 3 betrifft, so ist dies nicht geschickt versteckt, sondern nur ein wenig seltsam. Einige Hinweise:
quelle
Hier ist ein erster Versuch mit einer anderen und einfacheren Technik:
Ich bin mir ziemlich sicher, dass ich damit mehr anfangen kann - zum Beispiel, um auf andere Eingabebefehle zu reagieren. Ich muss an der Root-Switch-Verschleierung und der eigentlichen Sandwich-Herstellung arbeiten.
quelle