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.


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

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


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.


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.


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 !


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.


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

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


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

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.


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

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.


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


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

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.


44

Commodore 64 BÁSICO

0 NEW

NEW elimina el programa


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


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

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

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

¿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.


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.


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.


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

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

10

Bash 9 8 Personajes

nc -l 1&

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


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

¿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


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.


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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.