Codice che verrà eseguito solo una volta


223

Obbiettivo

L'obiettivo di questa sfida è scrivere codice che verrà eseguito una volta e una sola volta. Ciò significa sostanzialmente che danneggia il programma, lo script o l'ambiente in qualche modo. Se il riavvio del sistema consente di eseguire nuovamente il codice consentito.

punteggio

Numero di voti Tutti i presupposti devono essere chiaramente elencati. Tutte le risposte che avviano solo un riavvio o un arresto verranno squalificate.

Regole aggiuntive perché Greg Hewgill è un semidio

Non è consentito l'accesso root.

Data di fine

Il concorso si chiuderà il 31 maggio 2014.

modificare

Questo concorso è stato modificato in concorso di popolarità.


7
@PeterTaylor una possibile soluzione sarebbe la cancellazione automatica ma, come risulta dal risultato, non è l'unica.
Lukei,

101
Per molte persone che chiamano viin un singolo ambiente terminale ha questo effetto, senza scampo se non si riavvia :) Solo uno scherzo qui.
Orione,

6
Il sito è gratuito per te per proporre una domanda del genere.
ojblass,

16
echo "If you try to execute me again, it means you are an idiot.";<- Nessuno eseguirà più di una volta: P
user3459110

25
Il software relativo ai missili si sarebbe qualificato? ;)
rsegal

Risposte:


518

Veglia

Finalmente un caso d'uso per Veglia!

def main():
  raise Exception()

Estratto dalla "specifica della lingua":

Va da sé che qualsiasi funzione che genera un'eccezione che non viene rilevata è errata e deve essere punita.

...

Se un giuramento viene meno, la funzione offensiva [...] sarà debitamente punita.

Come?

Semplice: verrà eliminato dal tuo codice sorgente.

L'unico modo per garantire che il tuo programma soddisfi i suoi requisiti per vietare assolutamente il codice che non riesce a farlo. Con Vigil, lo farà automaticamente.

Esistono altri modi per farlo, perché Vigil fornisce le parole chiave imploree swearche sono fondamentalmente giuramenti per aderire a determinate condizioni pre e post:

def main():
  swear 0 > 1

116
Senza dubbio, questo merita di vincere.
Matteo Italia,

77
Finalmente un linguaggio sufficientemente vigile per l'era moderna! Inizierò ad usarlo in produzione. Tutti i bug devono essere eliminati.
Claudiu,

13
A me sembra che non sia necessariamente colpa della funzione che genera un'eccezione non rilevata, potrebbe anche essere che le funzioni nello stack di chiamate siano negligenti per non averle rilevate. Potrebbe anche suggerire che l'architettura dell'intera applicazione sia difettosa (Perché forse non c'è modo di gestire correttamente quell'eccezione senza ristrutturare il codice?) In breve, l'intero programma dovrebbe essere eliminato.
Jonathan Pullano,

10

32
Punti aggiuntivi per imprecare. Un programma che fa una dichiarazione falsa sicura deve senza dubbio essere eliminato.
Orione,

293

Praticamente qualsiasi distro Linux, 9 caratteri

Questo è un classico!

#!/bin/rm

Metti questo in un file ed eseguilo:

> ed
a
#!/bin/rm
.
wq foo
> ls
Mail mbox foo
> chmod 777 foo
> ./foo
> ls
Mail mbox

Aaand è sparito!

Quanto sta succedendo: sto davvero correndo rm! #!si chiama shebang . E se inserisci uno di questi seguito da un percorso di un eseguibile come prima riga dello script, il programma di caricamento del programma eseguirà il tuo file di script con qualsiasi cosa tu abbia scritto lì - il valore predefinito è di solito #!/bin/basho #!/bin/sh(Bourne-again shell / Bourne shell) . Il primo argomento passato a questo script sarà il nome del file stesso (motivo per cui vedi così tante soluzioni tra cui %0o $0e simili qui); così facendo contenere il mio file #!/bin/rmed eseguendolo, tutto ciò che sto facendo è passare il nome del file al mio rm.


9
Senza aver mai usato Linux da solo, penso che elimini il file di script.
Οuroso

56
@NateKerkhofs la #!sequenza inizia uno shebang, che identifica quale interprete userai per lo script - normalmente /bin/bash. Qui, Flonk ha usato /bin/rmcome "interprete". rmè un programma che cancella i file. poiché Linux pensa che vogliamo rmessere un interprete, passa il nome del file come argomento. pertanto, il file si elimina automaticamente

19
Questo è isterico
ojblass

25
@ user80551 Non ho bisogno dell'accesso root per questo.
Flonk,

9
hmm ..../foo mbox
Izkata

241

x86 binario, 4 byte

F0 0F C7 C8

Presupposto: deve essere eseguito su una CPU Pentium P5.

L'istruzione sopra è comunemente nota come bug F00F . Tenta di eseguire un'istruzione non valida, con prefisso lock .

Ciò congela completamente la CPU (non una battuta d'arresto né un riavvio) e non richiede nemmeno l'accesso come root.


4
Wow ... è davvero interessante.
ojblass,

31
@JackM: Lo sarà, ma ciò è esplicitamente consentito nella domanda.
Dennis,

34
@JackM, sembra un ottimo modo per interrompere l'esecuzione dello "script".
Paul Draper,

5
Ricordo quando questo bug stava facendo il giro. Una soluzione alternativa al kernel è stata trovata quasi immediatamente: non si arresta in modo anomalo al computer se non si esegue un sistema operativo senza la patch.
zwol,

3
@RosLuP 209 utenti diversi, apparentemente. Se non sei d'accordo, riduci il voto e vai avanti.
Dennis,

150

Bash, 5

>"$0"

Si tronca a lunghezza zero.

Se il nome file non contiene spazi, >$0funziona con 3 caratteri !


2
In realtà, le virgolette non sono mai necessarie per una variabile utilizzata in un nome file di reindirizzamento come questo, anche se il programma o il percorso del programma contiene spazi, a causa di un caso speciale nelle regole di analisi della shell. Quindi puoi sempre farlo in 3 caratteri!
apenwarr,

3
@apenwarr dice "$ 0: reindirizzamento ambiguo" quando senza virgolette e il nome file contiene spazi

1
@apenwarr, è necessario se la shell che interpreta quello script si basa su ksh88 o bash non è in modalità posix. Non riguarda lo spazio, riguarda qualsiasi personaggio di $IFSfor bash e caratteri jolly per bash e ksh88. Una sceneggiatura molto meno usuale viene generalmente interpretata dal sistema sh, ma invece alcune shell tra cui bash e ksh88 le interpretano in un figlio di se stesse.
sch

144

gzip

#!/bin/gzip

Con molto fastidio per le persone abituate a strumenti non distruttivi da riga di comando, gzip per impostazione predefinita rovina il file originale, sostituendolo con una versione compressa (aggiungendo un suffisso).

Questa è una variante #!/bin/rmdell'opzione, tranne che questa è recuperabile dall'intervento umano manuale (chiamalo gunzip). Come bonus speciale, il file risultante è molto più lungo dell'originale (la differenza dipende dalla lunghezza del nome file).

Attenzione: la posizione di gzippuò variare.

EDIT: come sottolineato da WChargin, questo è più portatile:

#!/usr/bin/env gzip

Il resto del file può avere qualsiasi contenuto. È essenzialmente un file che, quando viene chiamato, si nasconde in una scatola e si rifiuta di uscire fino a quando non viene decompresso forzatamente.


7
Non ci avevo mai pensato prima, ma hai assolutamente ragione.
ojblass

molto interessante
Grijesh Chauhan

11
"Avvertenza: la posizione di gzippuò variare" - questo non è un codice golf , quindi puoi usarlo#!/usr/bin/env gzip
wchargin

37
+1 solo per It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.te ha reso la mia giornata, ed è l'una.
applaude il

È essenzialmente un file che, quando viene chiamato, si nasconde in una scatola e si rifiuta di uscire fino a quando non viene decompresso forzatamente. mi ha fatto ridere. : D
Mischa,

121

Bash, 13 12

Non il più breve, ma in realtà non elimina il file o rende il sistema inutilizzabile.

chmod 0 "$0"

Se il nome file non contiene spazi, è possibile rimuovere le virgolette per salvare 2 caratteri.

Spiegazione

Rimuove tutte le autorizzazioni ( rwx) da se stesso. Quando si tenta di eseguirlo, o anche visualizzare il suo codice, una seconda volta, senza ripristinare manualmente le autorizzazioni, si dice qualcosa di simile

bash: <FILENAME>: Permission denied

Ripristina le autorizzazioni con

chmod +rwx <FILENAME>

Vecchia versione

Rimuove solo i permessi di esecuzione, ma un carattere più a lungo (questa era una domanda di prima che venisse cambiata in di ):

chmod -x "$0"

Versione subdola di Łukasz Niemier

#!/bin/chmod 0

4
chmod 0funziona anche
gnibbler,

@gnibbler thnx, aggiunto

Penso che puoi chiamare il programma ae salvare ancora 3 caratteri:chmod 0 a
yo '

@tohecz questo è fondamentalmente barare però

5
Ancora più bello#!/bin/chmod 0
Hauleth,

112

6800 codice macchina - 1 byte

0xDD

Questo è noto come HCF o Halt and Catch Fire


78
Bene, le regole dicono "Qualsiasi risposta che ha appena avviato un riavvio o un arresto sarà squalificata", ma questo non solo avvia un arresto, perché prende fuoco. Quindi, +1!
Trejkaz,

94

Shell + sed, 16 byte

Non abbastanza distruttivo come alcune delle altre risposte ;-)

Questo script inserisce un commento #all'inizio di ogni riga di se stesso:

sed -i s/^/#/ $0

3
Che ne dici sed -i g $0?
seshoumara,

91

Commodore 64 BASIC

Questo non cancella il programma.

1 POKE 2048,1

Auto distruzione

Secondo la mappa di memoria di Commodore 64 , l'indirizzo 2048non è utilizzato, ma deve contenere un valore in 0modo che il programma BASIC possa essere ESEGUITO.


1
Poke sposta semplicemente una variabile in una posizione?
ojblass

12
@ojblass sì, efficacemente. poke a, bè equivalente al codice C *((unsigned char *)a) = b;.
Jules,

4
Mi piacerebbe visualizzare i miei poke FaceBook in quel modo!
Sunny R Gupta,

3
Oh wow ... Ricordo PEEK e POKE di C64 BASIC! Stavo scrivendo queste cose intorno al 1977.
Fixee,

nota a margine: un 0byte viene utilizzato per contrassegnare la fine delle righe di codice; quindi l'indirizzo 0x800 probabilmente ne ha bisogno per segnare l'inizio della prima riga di codice.
Tito

89

Presupposto: esecuzione di Solaris, accesso come root

killall

3
Solaris ha davvero una cosa del genere?
ojblass,

21
Sì, fa esattamente ciò che dice sulla scatola e uccide tutti i processi in esecuzione.
Greg Hewgill,

un voto per te!
ojblass,

9
1, La domanda menziona che non è consentito l'accesso root.
user80551,

119
@ user80551 è il motivo di quella regola.
Seiyria,

68

Python, 18 anni

open(__file__,'w')

Tronca il file aprendolo in modalità di sola scrittura.


14
Nel caso in cui tu sia serio, si apre (si __file__riferisce al proprio nome file). L'apertura in wmodalità tronca il file, sostanzialmente lo cancella.
Bob,

7
Penso che il troncamento avvenga all'aperto, ma indipendentemente dal runtime di Python dovrebbe svuotare tutti i file aperti alla fine del programma e Python o il sistema operativo li chiuderanno al termine del processo. ', in genere è buona pratica chiudere esplicitamente le maniglie aperte quando hai finito con esse.
Bob,

5
Il modo "giusto" per gestire i file in Python è con ... er, con. with open("myfile.txt","r") as thefile:e quindi il codice di gestione dei file chiuderà automaticamente il file al termine.
Schilcote,

1
Questo potrebbe essere abbreviato in qualcosa del genere open("f.py","w").
Ethan Bierlein,

1
Non smette di funzionare quando rimane .pyc
minmaxavg

66

Lotto: 5 byte

%0|%0

Fondamentalmente è il forkbomb per Windows.

L'app inizia il suo primo argomento due volte. Non eseguirlo in un ambiente produttivo;)


83
Esiste un ambiente Windows produttivo? (Sto scherzando ovviamente).
Orione,

17
sembra così innocente!
ojblass

15
Ok, sicuramente non provarlo. Non è andata bene.
rmobis,

75
Non hai il rappresentante da sottovalutare, ma viola "corre solo una volta" nel modo più grave possibile.
Xan,

14
Credo che un essere umano lo esegua solo una volta e che si qualifichi.
ojblass,

54

JavaScript

localStorage.x = eval(localStorage.x + localStorage.x)

La prima volta che lo eseguirai, funzionerà bene:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
NaN

Se si tenta di eseguirlo di più (anche se si aggiorna), verrà visualizzato un errore:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
ReferenceError: NaNNaN is not defined

5
Quindi, se lo esegui molte volte, ottieni il tema Batman. +1 per quello.
Hankrecords,

2
@Hankrecords Purtroppo, non proprio, dato che questo non verrà eseguito più tardi ...
RedClover,

@Soaku Bummer ...
Hankrecords,

@Hankrecords a meno che tu non lo rimuova eval, ma non soddisferà questa sfida
RedClover,

46

Il sistema operativo CMS di IBM, che è un sistema operativo per utente singolo che viene eseguito come guest sotto l'hypervisor VM di IBM, ha una struttura di file interessante.

I file sono composti da tre elementi, Nome file, Tipo file e Modalità file. La modalità file è composta da due elementi, un singolo alfabetico, che per facilità di spiegazione può essere considerato in modo simile alla lettera di unità per Windows / MS-DOS e una singola cifra numerica.

La singola cifra numerica ha significato, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , e per questa attività è il numero 3 che è interessante:

Numero
modalità file 3 Il numero modalità file 3 indica che i file vengono cancellati dopo la lettura. È possibile utilizzare la modalità file numero 3 se non si desidera conservare copie sui minidischi o nelle directory SFS.

Quindi, trascorri ore a scrivere il tuo script e archiviarlo come `LOST FOREVER A3 '. Eseguilo, funziona la prima volta. Partenza per casa, lavoro ben fatto.

Nota, non viene prodotto alcun messaggio che indica la cancellazione. Dopotutto, tutti sanno cosa 3significa, vero?

In realtà è ovviamente molto utile. Una volta completato il test, è possibile utilizzare i 3file temporanei e non è necessario ripulirlo in seguito, poiché sono file read-once.


44

Commodore 64 BASIC

0 NEW

NEW elimina il programma.


1
Che cosa fanno?
Darth Egregious,

3
@utente973810 se ricordo di base, nuovo è per pulire la memoria, quindi eliminerà il programma
user902383

3
Bello. Non specifico per Commodore 64, probabilmente funziona come su quasi tutte le macchine BASIC a 8 bit degli anni '80 ...
yap

Potresti anche VECCHIO o O. anche indietro. Ho appena sperimentato il genio della codifica del gioco di 12 mesi di 12 anni; lavoro una volta per caso. Quindi salvato accidentalmente invece di vecchio. O. non ha più funzionato :( Ho imparato come gli editor esadecimali funzionassero piuttosto nitidi però :)
Matt Warren

3
@ysap: sarebbe più portatile se usasse 1 come numero di riga; non tutte le implementazioni BASIC supportano la linea numero 0.
celtschk,

41

Bash, 12

Nota: questo è distruttivo.

:(){ :|:&};:

È la popolare bomba a forcella di bash. Mangia esponenzialmente tutta la memoria e il PID blocca il sistema. Un riavvio forzato consentirà di eseguire nuovamente il codice, ma perché dovresti farlo?


Bash, 10

:(){ :&};:

Per due caratteri in meno, questo mangia la tua memoria in modo lineare.


Bash, 7

w;PATH=

w viene scelto come il file eseguibile più breve che mi venga in mente.

Questo semplicemente cancella la variabile path in modo che la shell non possa trovare /usr/bin/wla prossima volta. Il riavvio della shell lo risolve poiché il percorso è in genere archiviato~/.profile


Dannazione: DI ha appena avuto la stessa idea: P
Knerd,

1
:(){ :&};:non dovrei mangiare la tua memoria. Si ferma non appena ha biforcato, quindi c'è sempre e solo O(1)attivo. Hai fatto while(fork());, ciò che mangerebbe linearmente la tua memoria è l'equivalente di fork(); while(1);.
Marinus,

26
Wow! quelle sono alcune emoticon mortali! Meglio non chiamare il mio computer con un'espressione accigliata :(){ ...
Level River St

1
Se ricordo bene ... la bomba a forcella periodicamente lascia aperto un PID. Lo script può essere eseguito di nuovo in quell'intervallo ... e se ciò non conta, è possibile uccidere tutte le forche con un certo sforzo. Il riavvio è semplicemente la soluzione più semplice.
Brilliand,

11
Non penso che questo si qualifichi. Non rende impossibile eseguire nuovamente lo script, ma garantisce che venga eseguito nuovamente (molte volte).
Ben Voigt,

20

C #

Codice più breve per l'eliminazione di sé

Process.Start(new ProcessStartInfo("cmd.exe", "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location + "\""));

Codice per renderlo impercettibile nell'interfaccia utente

Process.Start( new ProcessStartInfo()
{
    Arguments = "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location+"\"",
    WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, FileName = "cmd.exe"
});

7
Finalmente una risposta in C #!
Pharap,

Perché è richiesta la scelta?
wizzwizz4,

19

C ++ 71

Al file eseguibile "golf" viene negata l'autorizzazione alla successiva esecuzione.

#include <stdlib.h>
int main()
{
system("chmod a-x golf");
return 0;
}

JavaScript / HTML 137, 145 con test console

<script id="s"> 
function h(){
console.log(1);
var s=document.getElementById("s");
h=s.innerHTML;
h=h.replace("h","g");
s.innerHTML=h;
}

11
@Templar nel contesto di JavaScript, penso che l'aggiornamento della pagina conti come riavvio (forse?)

2
Anche se non stavi rimuovendo lo script dalla pagina, verrà comunque eseguito solo una volta. Non ha senso.
nderscore,

2
@nderscore Sembra che la funzione h sia quella che verrà eseguita solo una volta. Devi effettivamente chiamarlo da qualche altra parte (analogo all'esecuzione di un programma, immagino). Di ', <button onclick="h();">.
Bob,

4
Dato che è consentito ricaricare la pagina e il tuo obiettivo è solo quello di impedire a h di essere eseguibile più di una volta mentre è già caricato, cosa c'è che non va function h(){h=0}?
Appassionato del

1
Con #include <sys/stat.h>te puoi accedere chmoddirettamente alla funzione, risparmiando parecchi byte ( <stdlib.h>non è più necessario e nemmeno lo è system). Inoltre, non returnè necessario.
Ben Voigt,

19

My Name's Shell ... PowerShell

Classico messaggio autodistruggente:

@'
##################################
Project X is a go

Meet Eagle 1 at WP Alpha

Further comms is hereby prohibited
##################################
This message will self destruct in 
5 seconds
'@
5..1| %{$_;Sleep 1;}
"Goodbye"
rm $(.{$MyInvocation.ScriptName})

Spiegazione, per favore?
noɥʇʎԀʎzɐɹƆ

@ noɥʇʎԀʎzɐɹƆ Le righe fino a 13 sono semplicemente senza senso. Dopodiché, come qualsiasi altra shell, PowerShell carica in memoria lo script in esecuzione e quindi non ha più bisogno del file di script originale ... quindi si elimina da solo.
SomeShinyObject

18

Bash (5)

rm $0

Supponendo che non ci siano spazi nel nome file.


40
Ecco perché Unix è meglio di Windows: rm invece di del ti ha salvato un byte.
MadTux,

1
@MadTux Preferisco * nix a Unix.
wizzwizz4,

14

sh

#!/bin/sh
curl http://runonce.herokuapp.com/

Funzionerà solo una volta (e mostrerà "Hello, world!" Se funziona), anche se reinstalli il sistema e inserisci nuovamente lo script.


EDIT: Ho pensato che avrei rilasciato anche una sceneggiatura dietro runonce. Niente di speciale, in quanto non doveva essere rilasciato in entrambi i modi, ma comunque.

<?php
$db = pg_connect("[connection information]");
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];

pg_query("DELETE FROM users WHERE time < now() - interval '1 day'");

$result = pg_query_params($db, "SELECT * FROM users WHERE ip = $1 LIMIT 1", array($ip));

if (!pg_fetch_row($result)) {
    echo "Hello, world!\n";
    pg_query_params($db, "INSERT INTO users (ip) VALUES ($1)", array($ip));
}

Oltre allo schema del database

CREATE TABLE users (
    ip inet PRIMARY KEY,
    time timestamp with time zone NOT NULL DEFAULT now()
);
CREATE INDEX ON users (time);

I dati sono memorizzati nel database di Heroku, sentiti libero di controllare la loro politica sulla privacy se vuoi. Non controllo i dati archiviati in un database, sono archiviati esclusivamente per consentire l'esecuzione del codice una volta.


4
Direi che questo verrà eseguito più volte, non produce alcun output dopo il primo.
Brilliand,

5
Ciò non ha nemmeno mostrato una volta "Hello World" per me.
Paŭlo Ebermann,

1
@ StéphaneGourichon: Sì, ricorda gli IP e non c'è modo di rimuovere un IP prima della rimozione automatica. Ho deciso di inserire il codice sorgente, in modo da poter controllare cosa fa.
Konrad Borowski

1
@ StéphaneGourichon: pg_query_paramspraticamente protegge dall'iniezione SQL. Tuttavia, non verrà salvato, poiché '; DROP TABLE users;--non è un IP valido ( inetaccetta solo IP) e, pertanto, se si dispone di X-Forwarded-Forun'intestazione falsa , la visita non verrà salvata. Non lo considero un problema.
Konrad Borowski l'

2
Credo che questa sia una violazione di una scappatoia standard: esternalizzare la vera risposta .
juniorRubyist,

12

PHP, 22 20 caratteri

<?=unlink(__FILE__);

EDIT: rimossi due caratteri alla fine per commenti.


2
Questo può essere ulteriormente semplificato in quanto: non è richiesto <?unlink(__FILE__);il trascinamento?>
leepowers

Devi iniziare con <?=o il tag iniziale non viene riconosciuto.
Michael Mior,

2
PHP si sta distruggendo ... ah! Linea E_NOTICE 3048
metadings

<?+ anche lo spazio è ok. Non puoi semplicemente usare una lettera dopo il tag corto.
Tito

11

Ruby, 14

Riscrive il codice sorgente come nome del programma.

IO.write $0,$0

3
E se il programma si chiamasse "IO.write $ 0, $ 0"? "Presupposto: assegna al programma un nome che non sia un codice valido in nessuna lingua."
Brilliand,

@Brill e un programma ruby ​​dovrebbe sempre finire con .rbe anche se il suo nome fosse "IO.write $ 0, $ 0 # .rb" che non funzionerà perché durante la scrittura includerà il percorso completo.
Mhmd

3
@Mhmd un programma ruby ​​può finire con qualsiasi cosa. Per esempio geme irbsono programmi rubino con alcuna estensione.
bfontaine,

@bfontaine Che hanno shebangs. Questo no.
wizzwizz4,

@ wizzwizz4 Shebangs non ha nulla a che fare con l'estensione. ruby fooe ruby foo.rbfunzionerà allo stesso modo con o senza shebang. ./fooe ./foo.rb(supponendo che siano eseguibili) falliranno entrambi senza shebang e avranno successo (assumendo il codice corretto, ecc.).
bfontaine,

10

Lotto (6 caratteri)

Ciò presuppone che abbiamo l'autorizzazione per eliminare il file e, naturalmente, può essere fatto su Windows (forse anche MS-DOS).

del %0

10

Bash 9 8 personaggi

nc -l 1&

Funzionerà solo una volta, perché la porta è bloccata per sempre.


1
Penso che questo non funzioni, perché 0è una porta speciale (è riservata). Quando eseguo questo sul mio computer, posso aprirlo più volte. Inoltre, è una porta < 1024, il che significa che richiede l'accesso root per essere ascoltato.
heinrich5991,

nc -l 1&risolverebbe il problema con 0un byte più corto, poiché l'ultimo spazio non è necessario.
Kasperd,

@kasperd Grazie per l'input :-)
Falco,

@ heinrich5991 ok - di quanto avrei bisogno di 11 caratteri senza accesso root per usare una porta come 9654
Falco

Vuoi spiegare perché hai effettuato il downvoting?
Falco,

9

NodoJS - 33 byte

require('fs').unlink(__filename);

Potresti descrivere cosa fa questo per coloro che non hanno familiarità con la lingua?
Kyle Kanos,

1
@KyleKanos Ottiene il modulo del file system fse il nome file corrente __filenamee lo rimuove dal file system.
Appassionato del

7
È possibile eludere il punto e virgola perché sono facoltativi in ​​JavaScript.
nalply

8

Lotto, 7 caratteri

Salvare il lavoro non salvato prima di provare questo.

Presuppone un sistema a 64 bit o un sistema a 32 bit con memoria RAM <2 GB. Deve essere salvato in un file .bat o .cmd prima di essere avviato, semplicemente inserendolo in cmd.exe non funzionerà.

^ nul<^

Consuma un core CPU completo e riempie la memoria RAM a una velocità di diverse centinaia di megabyte al secondo. Se non lo fermi in tempo (Task Manager), consumerà ogni byte di RAM sul tuo computer, l'intero sistema si bloccherà e non potrai fare nulla prima di spegnere e riavviare il tuo computer forzatamente tagliando accensione o tenendo premuto il pulsante di accensione.

Tutti i crediti vanno a txtechhelp su StackOverflow per questo, vedere maggiori informazioni qui: https://stackoverflow.com/q/23284131/1955334


Come sarebbe possibile? Che dire del paging? Priorità del processo?
Nicolas Barbulesco,

Ho eseguito questa sceneggiatura, non è successo niente.
Pavel

@Pavel Immagino che sia stato corretto in Windows 10 allora. Non riesco a riprodurlo su Windows 10, ma funziona su Windows 8.1.
bilde2910,

1
"Consuma un core della CPU completo e riempie la memoria RAM ad una velocità di diverse centinaia di megabyte al secondo. Se non la fermi in tempo (Task Manager), consumerà ogni byte di RAM sul tuo computer, l'intero sistema si bloccherà e non potrai fare nulla prima di spegnere e riavviare forzatamente il computer tagliando l'alimentazione o tenendo premuto il pulsante di accensione. " Sembra una storia dell'orrore per computer ...
noɥʇʎԀʎz

7

Ecco un paio. A differenza di molti, questi non sono distruttivi, solo creativi e non ortodossi.

bash

#!/usr/bin/env bash
read <<< ''
printf "$REPLY" > "$0"

Questo è piuttosto semplice. La variabile $REPLYviene creata implicitamente da read, ma riempita con un herestring vuoto. Quella stringa vuota viene quindi printf'inserita nello script corrente. È un equivalente piuttosto offuscato di quanto segue:

#!/usr/bin/env bash
cat <<< '' > "$0" # probably a lot more portable

Windows Batch

copy con %0 < nul

La seconda copia sostanzialmente l'input della console, letto da nul, nel file corrente.


Postato dopo questo è diventato un concorso di popolarità
Isiah Meadows

1
Il primo non funzionerà senza i permessi di root. Perché stai cercando di sostituire il dispositivo null? Se eseguito come root, ciò farebbe effettivamente comportare il sistema in modo irregolare. Stai anche sovrascrivendo il null mentre lo scrivi :) Perché non spostarlo altrove? Come mv "$ 0" "$ {0} x" o qualcosa del genere? Dovrebbe fare il trucco.
Orione,

Il file esiste ancora dopo?
Isiah Meadows,

Ora ho completamente cambiato l'esempio di Bash.
Isiah Meadows,

In che modo questi non sono distruttivi?

7

Sinclair BASIC

10 POKE 23635,255

Sposta l'indirizzo del programma BASIC in memoria lontano da dove dovrebbe essere (203) in modo che l'interprete trovi i dati errati.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.