Código que solo se ejecutará una vez

223

Gol

El objetivo de este desafío es escribir código que se ejecutará una vez y solo una vez. Esto significa básicamente que daña el programa, el script o el entorno de alguna manera. Si reiniciar el sistema permite que el código vuelva a ejecutarse, eso está permitido.

Puntuación

Numero de votos. Todos los supuestos deben estar claramente enumerados. Cualquier respuesta que solo inicie un reinicio o detención será descalificada.

Reglas adicionales porque Greg Hewgill es un semidiós

No se permite el acceso de root.

Fecha final

El concurso se cerrará el 31 de mayo de 2014.

Editar

Este concurso ha sido cambiado a concurso de popularidad.

ojblass
fuente
77
@PeterTaylor, una posible solución sería la eliminación automática, pero como resultado muestra que no es la única.
Lukei
101
Para muchas personas que llaman vien un solo entorno de terminal tiene este efecto, no hay escapatoria a menos que reinicies :) Solo una broma aquí.
orion
66
El sitio es gratuito para que usted proponga tal pregunta.
ojblass
16
echo "If you try to execute me again, it means you are an idiot.";<- Nadie ejecutará más de una vez: P
usuario3459110
25
¿Habría calificado el software relacionado con misiles? ;)
rsegal

Respuestas:

518

Vigilia

¡Finalmente un caso de uso para Vigil!

def main():
  raise Exception()

Extracto de la "especificación del lenguaje":

No hace falta decir que cualquier función que arroja una excepción que no se detecta es incorrecta y debe ser castigada.

...

Si se rompe un juramento, la función infractora [...] será debidamente castigada.

¿Cómo?

Simple: se eliminará de su código fuente.

La única forma de garantizar que su programa cumpla con sus requisitos para prohibir absolutamente el código que no lo haga. Con Vigil, lo hará automáticamente.

Hay otras formas de hacer esto, porque Vigil proporciona las palabras clave implorey swearson básicamente juramentos para cumplir ciertas condiciones previas y posteriores:

def main():
  swear 0 > 1
Martin Ender
fuente
116
Sin duda, esto merece ganar.
Matteo Italia
77
¡Finalmente, un lenguaje suficientemente vigilante para la era moderna! Voy a comenzar a usarlo en producción. Todos los errores deben ser eliminados.
Claudiu
13
Para mí, parece que no es necesariamente culpa de la función que arroja una excepción no detectada, también podría ser que las funciones en la pila de llamadas son negligentes por no poder capturarla. Incluso podría sugerir que la arquitectura de toda la aplicación es defectuosa (¿Porque quizás no hay forma de manejar adecuadamente esa excepción sin reestructurar el código?) En resumen, todo el programa debería eliminarse.
Jonathan Pullano
10
@JonathanPullano no eres el primero en notar eso ;)
Martin Ender
32
Puntos adicionales por jurar. Un programa que hace una declaración falsa de confianza sin duda necesita ser eliminado.
Orion
293

Casi cualquier distribución de Linux, 9 caracteres

¡Esto es un clásico!

#!/bin/rm

Pon esto en un archivo y ejecútalo:

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

¡Y se ha ido!

En cuanto a lo que está sucediendo: ¡realmente estoy corriendo rm! #!se llama un tinglado . Y si coloca uno de estos seguido de una ruta a algún ejecutable como la primera línea de su script, el cargador de programas ejecutará su archivo de script con lo que haya escrito allí; el valor predeterminado es usualmente #!/bin/basho #!/bin/sh(Bourne-again shell / Bourne shell) . El primer argumento que se pasa a este script será el nombre del archivo en sí mismo (por lo que verá tantas soluciones incluyendo %0o $0y los me gusta aquí); así que al hacer que mi archivo lo contenga #!/bin/rmy ejecutarlo, todo lo que estoy haciendo es pasar el nombre de archivo de mi archivo rm.

Flonk
fuente
99
Sin haber usado Linux yo mismo, creo que elimina el archivo de script.
2014
56
@NateKerkhofs la #!secuencia comienza un shebang, que identifica qué intérprete va a utilizar para el guión, normalmente /bin/bash. Aquí, Flonk ha utilizado /bin/rmcomo "intérprete". rmes un programa que elimina archivos. porque Linux piensa que queremos rmser un intérprete, le pasa el nombre del archivo como argumento. por lo tanto, el archivo se elimina a sí mismo
19
Esto es histérico
ojblass
25
@ user80551 No necesito acceso root para esto.
Flonk
99
hmm ..../foo mbox
Izkata
241

binario x86, 4 bytes

F0 0F C7 C8

Supuesto: debe ejecutarse en una CPU Pentium P5.

La instrucción anterior se conoce comúnmente como el error F00F . Intenta ejecutar una instrucción no válida, con el prefijo lock .

Esto congela la CPU por completo (no se detiene ni se reinicia) y ni siquiera requiere acceso a la raíz.

Dennis
fuente
44
Wow ... eso es realmente interesante.
2014
31
@JackM: Lo hará, pero eso está explícitamente permitido en la pregunta.
Dennis
34
@JackM, esa parece ser una excelente manera de detener la ejecución del "script".
Paul Draper
55
Recuerdo cuando este error estaba circulando. Se encontró una solución alternativa del lado del kernel casi de inmediato: no bloqueará la computadora a menos que esté ejecutando un sistema operativo sin el parche.
zwol
3
@RosLuP 209 usuarios diferentes, aparentemente. Si no está de acuerdo, vote hacia abajo y siga adelante.
Dennis
150

Bash, 5

>"$0"

Se trunca a la longitud cero.

Si el nombre de archivo no contiene espacios, ¡ >$0funciona para 3 caracteres !


fuente
2
En realidad, las comillas nunca son necesarias para una variable utilizada en un nombre de archivo de redireccionamiento como este, incluso si el programa o la ruta al programa contiene espacios, debido a un caso especial en las reglas de análisis de shell. ¡Así que siempre puedes hacerlo en 3 caracteres!
apenwarr
3
@apenwarr dice "$ 0: redirección ambigua" cuando sin comillas y el nombre del archivo contiene espacios
1
@apenwarr, es necesario si el shell que interpreta ese script está basado en ksh88 o bash no está en modo posix. No se trata de espacio, se trata de cualquier carácter de $IFSbash y caracteres comodín para bash y ksh88. Una secuencia de comandos sin sheg bang generalmente será interpretada por el sh del sistema, pero algunos shells, incluidos bash y ksh88, los interpretarán en su lugar.
sch
144

gzip

#!/bin/gzip

Para mucha molestia para las personas acostumbradas a las herramientas de línea de comandos no destructivas, gzippor defecto arruina el archivo original, reemplazándolo con una versión comprimida (agregando un sufijo).

Esta es una variación de la #!/bin/rmopción, excepto que esta es recuperable por intervención humana manual (llamada gunzip). Como beneficio especial, el archivo resultante es mucho más largo que el original (la diferencia depende de la longitud del nombre del archivo).

Advertencia: la ubicación de gzippuede variar.

EDITAR: como lo señaló WChargin, esto es más portátil:

#!/usr/bin/env gzip

El resto del archivo puede tener cualquier contenido. Es esencialmente un archivo que, cuando se llama, se esconde en una caja y se niega a salir hasta que lo desempaquete por la fuerza.

Orión
fuente
77
Nunca lo pensé antes, pero tienes toda la razón.
ojblass
muy interesante
Grijesh Chauhan
11
"Advertencia: la ubicación gzippuede variar" - esto no es código golf , por lo que puede usarlo#!/usr/bin/env gzip
wchargin
37
+1 solo por It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.Me alegraste el día, y es la 1 de la madrugada.
aplaudir
Esencialmente es un archivo que, cuando se llama, se esconde en una caja y se niega a salir hasta que lo desempaquete por la fuerza. me hizo reir : D
Mischa
121

Golpe, 13 12

No es el más corto, pero en realidad no elimina el archivo ni deja el sistema inutilizable.

chmod 0 "$0"

Si el nombre de archivo no contiene espacios, puede eliminar las comillas para guardar 2 caracteres.

Explicación

Elimina todos los permisos ( rwx) de sí mismo. Cuando intente ejecutarlo, o incluso ver su código, una segunda vez, sin restaurar manualmente los permisos, dirá algo como

bash: <FILENAME>: Permission denied

Restaurar los permisos con

chmod +rwx <FILENAME>

Versión antigua

Solo elimina los permisos de ejecución, pero un char más tiempo (esta fue una pregunta de antes de que se cambiara a ):

chmod -x "$0"

Versión furtiva de Łukasz Niemier

#!/bin/chmod 0

fuente
44
chmod 0funciona también
gnibbler
@gnibbler thnx, agregado
Creo que puede llamar al programa ay guardar 3 caracteres:chmod 0 a
yo '
@tohecz que básicamente es trampa
55
Aún más agradable#!/bin/chmod 0
Hauleth
112

Código de máquina 6800 - 1 byte

0xDD

Esto se conoce como HCF o Halt and Catch Fire

gnibbler
fuente
78
Bueno, las reglas dicen "Cualquier respuesta que solo inicie un reinicio o un alto será descalificada", pero esto no solo inicia un alto, porque también se incendia. Por lo tanto, +1!
Trejkaz
94

Shell + sed, 16 bytes

No es tan destructivo como algunas de las otras respuestas ;-)

Este script inserta un comentario #al comienzo de cada línea de sí mismo:

sed -i s/^/#/ $0
Trauma digital
fuente
3
¿Qué tal sed -i g $0?
seshoumara
91

Commodore 64 BÁSICO

Este no elimina el programa.

1 POKE 2048,1

Auto destrucción

Según el mapa de memoria del Commodore 64 , la dirección 2048no se utiliza, pero debe contener un valor 0para que el programa BASIC pueda EJECUTARSE.

Danko Durbić
fuente
1
¿Poke simplemente mueve una variable a una ubicación?
ojblass
12
@ojblass sí, efectivamente. poke a, bes equivalente al código C *((unsigned char *)a) = b;.
Julio
44
¡Me gustaría visualizar mis pinceladas de FaceBook de esa manera!
Sunny R Gupta
3
Oh wow ... ¡recuerdo PEEK y POKE de C64 BASIC! Estaba escribiendo estas cosas alrededor de 1977.
Fixee
nota al margen: 0se usa un byte para marcar el final de las líneas de código; entonces la dirección 0x800 probablemente necesita una para marcar el comienzo de la primera línea de código.
Titus
89

Supuesto: Ejecución de Solaris, conectado como root

killall
Greg Hewgill
fuente
3
¿Solaris realmente tiene tal cosa?
ojblass
21
Sí, hace exactamente lo que dice en el molde y mata todos los procesos en ejecución.
Greg Hewgill
un voto a favor para ti!
2014
99
1, la pregunta menciona que no se permite el acceso a la raíz.
user80551
119
@ user80551 él es el motivo de esa regla.
Seiyria
68

Pitón, 18

open(__file__,'w')

Trunca el archivo abriéndolo en modo de solo escritura.

segfaultd
fuente
14
En caso de que sea serio, se abre solo (se __file__refiere a su propio nombre de archivo). Abrir en wmodo trunca el archivo, básicamente lo borra.
Bob
77
Creo que el truncamiento ocurre al aire libre, pero independientemente del tiempo de ejecución de Python debería vaciar todos los archivos abiertos al final del programa, y ​​Python o el sistema operativo los cerrarán cuando finalice el proceso. Por supuesto, generalmente es una buena práctica cerrar explícitamente los controladores abiertos cuando haya terminado con ellos.
Bob
55
La forma "correcta" de manejar archivos en Python es con ... er, con. with open("myfile.txt","r") as thefile:y luego su código de manejo de archivos cerrará automáticamente el archivo cuando haya terminado.
Schilcote
1
Esto podría acortarse a algo así open("f.py","w").
Ethan Bierlein
1
No deja de funcionar cuando .pyc permanece
minmaxavg
66

Lote: 5 bytes

%0|%0

Básicamente es la bifurcación para Windows.

La aplicación inicia su primer argumento dos veces. No lo ejecute en un entorno productivo;)

Knerd
fuente
83
¿Existe un entorno productivo de Windows? (Estoy bromeando, por supuesto).
Orion
17
se ve tan inocente!
ojblass
15
Ok, definitivamente no intentes eso. No fue bien.
rmobis
75
No tengo el representante para votar negativamente, pero viola "carreras solo una vez" de la manera más severa posible.
Xan
14
Creo que un humano solo lo ejecuta una vez y que califica.
ojblass
54

JavaScript

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

La primera vez que lo ejecutes, funcionará bien:

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

Si intentas ejecutarlo más (incluso si actualizas), obtendrás un error:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
ReferenceError: NaNNaN is not defined
Casey Chu
fuente
55
Entonces, si lo ejecutas muchas veces, obtienes el tema de Batman. +1 por eso.
Hankrecords
2
@ Hankrecords Lamentablemente, en realidad no, ya que esto no se ejecutará más tarde ...
RedClover
@Soaku Bummer ...
Hankrecords
@Hankrecords a menos que elimines eval, pero entonces no cumplirá con este desafío
RedClover
46

El sistema operativo CMS de IBM, que es un sistema operativo de usuario único que se ejecuta como invitado bajo el VM Hypervisor de IBM, tiene una estructura de archivos interesante.

Los archivos constan de tres elementos, Nombre de archivo, Tipo de archivo y Modo de archivo. El modo de archivo consta de dos elementos, un solo alfabético, que para facilitar la explicación puede considerarse de manera similar a la letra de unidad para Windows / MS-DOS, y un solo dígito numérico.

El dígito numérico único tiene significado, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , y para esta tarea Es el número 3 lo que es interesante:

Modo de archivo número 3
El modo de archivo número 3 significa que los archivos se borran después de leerlos. Puede usar el modo de archivo número 3 si no desea mantener copias en sus minidiscos o en sus directorios SFS.

Entonces, pasa horas escribiendo tu guión y archívalo como 'PERDIDO PARA SIEMPRE A3'. Ejecútalo, funciona por primera vez. Partió a casa, trabajo bien hecho.

Tenga en cuenta que no se produce ningún mensaje que indique la eliminación. Después de todo, todos saben lo que eso 3significa, ¿no?

En realidad, por supuesto, es muy útil. Puede, una vez que se completen las pruebas, usar los 3archivos temporales y no tener que limpiarlos después, porque son archivos de lectura única.

Bill Woodger
fuente
44

Commodore 64 BÁSICO

0 NEW

NEW elimina el programa

Danko Durbić
fuente
1
¿Qué hace eso?
Darth Egregious
3
@ user973810 si recuerdo básico, nuevo es para limpiar la memoria, por lo que eliminará el programa
user902383
3
Agradable. No es específico para Commodore 64, probablemente funciona como es en casi cada máquina de base de 8 bits de los años 80 ...
ysap
Podrías OLD u O. también. Recién 12 meses de 12 años de edad genio de la codificación del juego; p trabajo por accidente una vez. Luego, accidentalmente guardado en lugar de viejo. O. ya no funcionó :( Aprendí cómo los editores hexadecimales trabajaron bastante bien :)
Matt Warren
3
@ysap: Sería más portátil si usara 1 como número de línea; no todas las implementaciones de BASIC admiten la línea número 0.
celtschk
41

Bash, 12

Nota: Esto es destructivo.

:(){ :|:&};:

Es la popular bomba de bifurcación. Exponencialmente se come toda la memoria y los PID bloquean el sistema. Un reinicio completo permitirá que el código se ejecute nuevamente, ¿por qué querrías hacer eso?


Bash, 10

:(){ :&};:

Por dos caracteres menos, esto consume tu memoria linealmente.


Bash, 7

w;PATH=

w es elegido como el ejecutable más corto que se me ocurre.

Esto simplemente borra la variable de ruta para que el shell no pueda encontrar /usr/bin/wla próxima vez. Reiniciar el shell lo corrige ya que la ruta generalmente se almacena en~/.profile

usuario80551
fuente
Maldición: DI acaba de tener la misma idea: P
Knerd
1
:(){ :&};:No debería comer tu memoria. Se detiene tan pronto como se bifurca, por lo que solo está O(1)activo. Has hecho while(fork());, lo que comería tu memoria linealmente es el equivalente de fork(); while(1);.
Marinus
26
¡Guauu! esas son algunas emoticones mortales! Es mejor que no llame a mi computadora con el ceño fruncido :(){ ...
Level River St
1
Si no recuerdo mal ... la bomba tenedor periódicamente deja un PID abierto. El script puede ejecutarse nuevamente en ese intervalo ... y si eso no cuenta, es posible matar todos los tenedores con algo de esfuerzo. Reiniciar es simplemente la solución más fácil.
Brilliand
11
No creo que esto califique. No hace que sea imposible que el script se ejecute nuevamente, sino que garantiza que se ejecute nuevamente (muchas veces).
Ben Voigt
20

C#

Código más corto para eliminar self

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

Código para que no se note en la interfaz de usuario

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"
});
BenVlodgi
fuente
77
¡Por fin, una respuesta de C #!
Pharap
¿Por qué se requiere elección?
wizzwizz4
19

C ++ 71

El archivo ejecutable "golf" no tiene permiso para ejecutarse la próxima vez.

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

JavaScript / HTML 137, 145 con prueba de consola

<script id="s"> 
function h(){
console.log(1);
var s=document.getElementById("s");
h=s.innerHTML;
h=h.replace("h","g");
s.innerHTML=h;
}
bacchusbeale
fuente
11
@Templar en el contexto de JavaScript, creo que actualizar la página cuenta como reiniciar (¿tal vez?)
2
Incluso si no estuviera eliminando el script de la página, solo se ejecutaría una vez. No tiene sentido esto.
nderscore
2
@nderscore Parece que la función h es lo que solo se ejecutará una vez. Tienes que llamarlo desde otro lugar (análogo a ejecutar un programa, supongo). Decir <button onclick="h();">.
Bob
44
Dado que la recarga de la página está permitida, y su objetivo es solo evitar que h sea ejecutable más de una vez mientras ya está cargada, ¿qué tiene de malo function h(){h=0}?
Keen
1
Con #include <sys/stat.h>usted puede acceder a la chmodfunción directamente, ahorrando bastantes bytes ( <stdlib.h>ya no es necesario, y tampoco lo es system). Además, no returnse necesita.
Ben Voigt
19

La cáscara de mi nombre ... PowerShell

Mensaje clásico de autodestrucción:

@'
##################################
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})
SomeShinyObject
fuente
¿Explicación, por favor?
noɥʇʎԀʎzɐɹƆ
@ noɥʇʎԀʎzɐɹƆ Las líneas hasta el 13 son tonterías. Después de eso, como cualquier otro shell, PowerShell carga el script en ejecución en la memoria y, por lo tanto, ya no necesita el archivo de script original ... por lo que se elimina a sí mismo.
SomeShinyObject
18

Golpe (5)

rm $0

Suponiendo que no tiene espacios en el nombre del archivo.

marinus
fuente
40
Esta es la razón por la cual Unix es mejor que Windows: rm en lugar de del le guardó un byte.
MadTux
1
@MadTux Prefiero * nix a Unix.
wizzwizz4
14

sh

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

Se ejecutará solo una vez (y muestra "¡Hola, mundo!" Si se ejecuta), incluso si reinstala el sistema y vuelve a colocar el script.


EDITAR: Pensé que también lanzaría un script detrás de runonce. Nada especial, ya que no se suponía que fuera lanzado de ninguna manera, pero lo que sea.

<?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));
}

Así como el esquema de la base de datos

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

Los datos se almacenan en la base de datos de Heroku, no dude en consultar su política de privacidad si lo desea. No verifico los datos almacenados en una base de datos, se almacenan únicamente para permitir que el código se ejecute una vez.

Konrad Borowski
fuente
44
Yo diría que esto se ejecutará varias veces, simplemente no produce salida después de la primera.
Brilliand
55
Eso ni siquiera una vez me mostró "Hello World".
Paŭlo Ebermann
1
@ StéphaneGourichon: Sí, recuerda las IP y no hay forma de eliminar una IP antes de la eliminación automática. Decidí poner el código fuente, para que pueda verificar lo que hace.
Konrad Borowski el
1
@ StéphaneGourichon: pg_query_paramsprácticamente protege de la inyección SQL. Sin embargo, no se guardará, ya '; DROP TABLE users;--que no es una IP válida ( inetsolo acepta IP) y, por lo tanto, si tiene un X-Forwarded-Forencabezado falso , su visita no se guardará. Yo no lo considero un problema.
Konrad Borowski el
2
Creo que esto es una violación de un vacío legal estándar: externalizar la respuesta real .
juniorRubyist
12

PHP, 22 20 caracteres

<?=unlink(__FILE__);

EDITAR: Se eliminaron dos caracteres al final por comentarios.

arrendajo
fuente
2
Esto se puede simplificar adicionalmente como: <?unlink(__FILE__);, el arrastre ?>no es necesario
leepowers
Debe comenzar con <?=o la etiqueta de inicio no se reconoce.
Michael Mior
2
PHP destruyéndose a sí mismo ... ¡ja! E_NOTICE línea 3048
metadings
<?+ espacio también está bien. Simplemente no puede usar una letra después de la etiqueta corta.
Tito
11

Rubí, 14

Reescribe el código fuente como el nombre del programa.

IO.write $0,$0
Mhmd
fuente
3
¿Y si el programa se llama "IO.write $ 0, $ 0"? "Suposición: asigne al programa un nombre que no sea un código válido en ningún idioma".
Brilliand
@Brilland un programa ruby ​​siempre debe terminar con .rbe incluso si su nombre fuera "IO.write $ 0, $ 0 # .rb", eso no funcionará porque al escribirlo incluirá la ruta completa.
Mhmd
3
@Mhmd un programa ruby ​​puede terminar con cualquier cosa. Por ejemplo gemy irbson programas Ruby sin extensión.
bfontaine
@bfontaine que tienen shebangs. Esto no lo hace.
wizzwizz4
@ wizzwizz4 Shebangs no tiene nada que ver con la extensión. ruby fooy ruby foo.rbfuncionará igual con o sin shebang. ./fooy ./foo.rb(suponiendo que sean ejecutables) fallarán sin shebang y tendrán éxito con él (asumiendo el código correcto, etc.).
bfontaine
10

Lote (6 caracteres)

Esto supone que tenemos permiso para eliminar el archivo y, por supuesto, se puede hacer en Windows (quizás también en MS-DOS).

del %0
Justin Krejcha
fuente
10

Bash 9 8 Personajes

nc -l 1&

Solo se ejecutará una vez, porque el puerto está bloqueado para siempre.

Falco
fuente
1
Creo que esto no funciona, porque 0es un puerto especial (está reservado). Cuando ejecuto esto en mi computadora, puedo abrirlo varias veces. Además, es un puerto < 1024, lo que significa que requiere acceso raíz para ser escuchado.
heinrich5991
nc -l 1&solucionaría el problema 0y sería un byte más corto, ya que no se necesita el último espacio.
kasperd
@kasperd Gracias por el aporte :-)
Falco
@ heinrich5991 ok - de lo que necesitaría 11 caracteres sin acceso de root para usar un puerto como 9654
Falco
¿Te importaría explicar por qué votaste en contra?
Falco
9

NodeJS - 33 bytes

require('fs').unlink(__filename);
cPu1
fuente
¿Podría describir lo que esto hace para aquellos que no están familiarizados con el idioma?
Kyle Kanos
1
@KyleKanos Obtiene el módulo del sistema de archivos fsy el nombre de archivo actual __filenamey elimina ese nombre de archivo del sistema de archivos.
Keen
77
Puede elidir el punto y coma porque son opcionales en JavaScript.
nalply
8

Lote, 7 caracteres

Guarde el trabajo no guardado antes de intentar esto.

Asume un sistema de 64 bits o un sistema de 32 bits con <2 GB de memoria RAM. Debe guardarse en un archivo .bat o .cmd antes de iniciarse, simplemente ingresarlo en cmd.exe no funcionará.

^ nul<^

Consume un núcleo de CPU completo y llena su memoria RAM a una velocidad de varios cientos de megabytes por segundo. Si no lo detiene a tiempo (Administrador de tareas), consumirá cada byte de RAM en su computadora, todo su sistema se congelará y no podrá hacer nada antes de apagar y reiniciar su computadora por la fuerza. encender o mantener presionado el botón de encendido.

Todos los créditos van a txtechhelp en StackOverflow para esto, vea más información aquí: https://stackoverflow.com/q/23284131/1955334

bilde2910
fuente
Cómo podría ser esto posible ? ¿Qué pasa con la paginación? Proceso prioritario ?
Nicolas Barbulesco
Ejecuté este script, no pasó nada.
Pavel
@Pavel Supongo que está arreglado en Windows 10 entonces. No puedo reproducirlo en Windows 10, pero funciona en Windows 8.1.
bilde2910
1
"Consume un núcleo de CPU completo y llena su memoria RAM a una velocidad de varios cientos de megabytes por segundo. Si no lo detiene a tiempo (Administrador de tareas), consumirá cada byte de RAM en su computadora, todo su sistema se congelará y no podrá hacer nada antes de apagar por la fuerza y ​​reiniciar su computadora cortando la alimentación o manteniendo presionado el botón de encendido ". Suena como una historia de terror para computadoras ...
noɥʇʎԀʎzɐɹƆ
7

Aquí hay una pareja. A diferencia de muchos, estos no son destructivos, solo creativos y poco ortodoxos.

Golpetazo

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

Este es bastante simple. La variable $REPLYse crea implícitamente por read, pero se llena con una herejía vacía. Esa cadena vacía se printfincorpora al script actual. Es un equivalente bastante ofuscado de lo siguiente:

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

Lote de Windows

copy con %0 < nul

El segundo básicamente copia la entrada de la consola, leída desde nul, en el archivo actual.

Isiah Meadows
fuente
Publicado después de que esto se convirtió en un concurso de popularidad
Isiah Meadows
1
El primero no funcionará sin permisos de root. ¿Por qué estás tratando de reemplazar el dispositivo nulo? Cuando se ejecuta como root, esto realmente haría que el sistema se comportara de manera errática. También está sobrescribiendo el valor nulo mientras escribe en él :) ¿Por qué no simplemente moverlo a otro lugar? ¿Como mv "$ 0" "$ {0} x" o algo así? Debería hacer el truco.
orion
¿El archivo todavía existe después?
Isiah Meadows
Ahora cambié completamente el ejemplo de Bash.
Isiah Meadows
¿Cómo son estos no destructivos?
ysap
7

Sinclair BASIC

10 POKE 23635,255

Mueve la dirección del programa BASIC en la memoria lejos de donde debería estar (203) para que el intérprete encuentre los datos incorrectos.

kitcar2000
fuente