Sadece bir kez çalıştırılacak kod


223

Hedef

Bu zorluğun amacı bir kez ve sadece bir kez çalıştırılacak kod yazmaktır. Bu, temel olarak programa, komut dosyasına veya çevreye bir şekilde zarar verdiği anlamına gelir. Sistemin yeniden başlatılması, kodun izin verilen tekrar çalıştırılmasını sağlar.

puanlama

Oy sayısı. Tüm varsayımlar açıkça listelenmelidir. Sadece bir yeniden başlatma veya durdurma başlatan herhangi bir cevap diskalifiye edilecektir.

Ek Kurallar çünkü Greg Hewgill bir demi-tanrıdır

Kök erişimine izin verilmiyor.

Bitiş tarihi

Yarışma 31 Mayıs 2014'te sona erecek.

Düzenle

Bu yarışma popülerlik yarışması olarak değiştirildi.


7
@PeterTaylor olası bir Çözüm bir öz silme olur, ancak sonuç gösterdiği gibi tek çözüm değildir.
Lukei

101
viTek bir terminal ortamında arama yapan birçok insan için bu etkiye sahiptir, siz yeniden başlatmadıkça kaçmazsınız :) Burada sadece bir şaka.
orion

6
Site böyle bir soru önerebilmeniz için ücretsizdir.
ojblass

16
echo "If you try to execute me again, it means you are an idiot.";<- Hiç kimse bir kereden fazla yürütmeyecek: P
user3459110

25
Füze ile ilgili yazılım kalifiye olur mu? ;)
rsegal

Yanıtlar:


518

gece nöbeti

Sonunda Vigil için bir usecase!

def main():
  raise Exception()

"Dil belirtiminden" alıntı:

Yakalanmayan bir istisna atan herhangi bir fonksiyonun yanlış olduğunu ve cezalandırılması gerektiğini söylemeye gerek yoktur .

...

Bir yemin bozulursa, rahatsız edici işlev [...] usulüne uygun olarak cezalandırılır.

Nasıl?

Basit: kaynak kodunuzdan silinecek.

Programınızın güvenliğini sağlamanın tek yolu, bunu yapamayan kodu kesinlikle yasaklamak için gereksinimlerini karşılamasıdır. Vigil ile bunu sizin için otomatik olarak yapacak .

Bunu yapmanın başka yolları da vardır, çünkü Vigil anahtar kelimeleri sağlar imploreve sweartemel olarak bazı ön ve son şartlara uymaya yemin eder:

def main():
  swear 0 > 1

116
Hiç şüphe yok ki, bu kazanmayı hak ediyor .
Matteo Italia

77
Son olarak, modern çağ için yeterince uyanık bir dil! Üretimde kullanmaya başlayacağım. Tüm böceklerin temizlenmesi gerekiyor.
Claudiu

13
Bana göre bu, yakalanmayan bir istisna atan işlevin hatası olmak zorunda değil, çağrı yığındaki işlevlerin onu yakalayamama konusunda ihmal edici olduğu da görünüyor. Tüm uygulamanın mimarisinin hatalı olduğunu bile söyleyebilir (Kodun yeniden yapılandırılmadan bu istisnayı düzgün bir şekilde idare etmenin bir yolu yoktur?) Kısacası, tüm program silinmelidir.
Jonathan Pullano


32
Küfür için ilave puanlar. Kendinden emin bir yanlış ifade veren bir programın şüphesiz ortadan kaldırılması gerekir.
orion

293

Hemen hemen her Linux dağıtımı, 9 karakter

Bu bir klasik!

#!/bin/rm

Bunu bir dosyaya koyun ve çalıştırın:

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

Ve gitti!

Neler olduğuna gelince: Gerçekten sadece koşuyorum rm! #!bir shebang denir . Bunlardan birini ve ardından komut satırınızdaki ilk satır olarak çalıştırılabilir olan bazı dosyaların yolunu koyarsanız, program yükleyici komut dosyası dosyanızı orada yazdıklarınızla yürütür - varsayılan değer genellikle #!/bin/bashveya #!/bin/sh(Bourne-again shell / Bourne kabuğu) . Bu betiğe iletilen ilk argüman, dosya adının kendisi olacaktır (bu yüzden %0veya $0burada ve buradakileri içeren pek çok çözüm görüyorsunuz ); bu yüzden dosyamı içerip #!/bin/rmçalıştırarak, yaptığım tek şey dosyamın dosya adını geçirmektir rm.


9
Linux'u kendim hiç kullanmadan , komut dosyasını sildiğini düşünüyorum .
Büyük,

56
@NateKerkhofs #!dizisi, normalde - senaryo için hangi tercümanı kullanacağınızı tanımlayan bir shebang başlatır /bin/bash. Burada, Flonk /bin/rmbir "tercüman" olarak kullanılmıştır . rmdosyaları silen bir programdır. Linux rm, tercüman olmak istediğimizi düşündüğü için, dosya adını argüman olarak geçirir. Bu nedenle, dosya kendini siler

19
Bu histerik
ojblass

25
@ user80551 Bunun için kök erişimine ihtiyacım yok.
Flonk

9
hmm ..../foo mbox
Izkata

241

x86 ikili, 4 bayt

F0 0F C7 C8

Varsayım: P5 Pentium işlemcide çalıştırılmalıdır.

Yukarıdaki talimat F00F hatası olarak bilinir . Kilit ile ön ekli geçersiz bir talimat yürütmeye çalışır .

Bu, CPU'yu tamamen dondurur (durma ya da yeniden başlatma değil) ve hatta kök erişimi gerektirmez.


4
Vay ... bu gerçekten ilginç.
ojblass

31
@JackM: Olacak, ama açıkça soruya izin verildi.
Dennis,

34
@ JackM, "script" in çalışmasını durdurmak için harika bir yol gibi görünüyor.
Paul Draper

5
Bu hatanın ne zaman sürdüğünü hatırlıyorum. Bir çekirdek geçici çözümü neredeyse hemen bulundu - düzeltme eki olmadan bir işletim sistemi çalıştırmıyorsanız, bilgisayar çökmez.
zwol

3
Görünüşe göre @RosLuP 209 farklı kullanıcılar. Eğer katılmıyorsanız, oy verin ve devam edin.
Dennis,

150

Bash, 5

>"$0"

Kendini sıfır uzunluğa kadar kısaltır.

Dosya adı boşluk içermiyorsa, 3 karakter>$0 için çalışır !


2
Aslında, böyle bir yönlendirme dosyasında kullanılan bir değişken için, program veya programın yolu, kabuk ayrıştırma kurallarındaki özel bir durum nedeniyle, boşluklar içermesine rağmen, tırnaklara ihtiyaç duyulmaz. Böylece her zaman 3 karakterde yapabilirsiniz!
apenwarr

3
@ apenwarr "tırnak işareti olmadan ve dosya adı boşluklar içerdiğinde" $ 0: belirsiz yönlendirme "diyor

1
@ apenwarr, bu betiği yorumlayan kabuğun ksh88'e dayanıyorsa veya posix modunda bash değilse gereklidir. Bu alanla ilgili değil, $IFSbash ve ksh88 için bash ve joker karakterler için olan herhangi bir karakter hakkında . She-bang az betik genellikle sistemin sh tarafından yorumlanır, ancak bash ve ksh88 dahil olmak üzere bazı kabukları yerine onları kendi çocuğuna yorumlar.
sch

144

gzip

#!/bin/gzip

Tahribatsız komut satırı araçlarında kullanılan insanlara çok fazla sıkıntı vermek için, gzipvarsayılan olarak orijinal dosyayı bozar, onu gzip sürümüyle değiştirir (bir sonek ekleyerek).

Bu, #!/bin/rmseçeneğin bir varyasyonudur, bunun haricinde, manuel insan müdahalesiyle geri kazanılabilir gunzipolması gerekir (çağrı yapılması). Özel bir bonus olarak, ortaya çıkan dosya orijinalden çok daha uzundur (fark dosya adı uzunluğuna bağlıdır).

Uyarı: konumu gzipdeğişebilir.

EDIT: WChargin tarafından belirtildiği gibi, bu daha taşınabilir:

#!/usr/bin/env gzip

Dosyanın geri kalanı herhangi bir içeriğe sahip olabilir. Aslında, çağrıldığında kendisini bir kutuda gizleyen ve zorla paketini açana kadar çıkmayı reddeden bir dosya.


7
Daha önce hiç düşünmedim ama kesinlikle haklısın.
ojblass

çok ilginç
Grijesh Chauhan

11
"Uyarı: konumu gzipdeğişebilir" - bu kod golf değildir , bu nedenle kullanabilirsiniz#!/usr/bin/env gzip
wchargin

37
+1 sadece It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.senin için günümü yaptım ve saat 1.
alkış

Aslında, çağrıldığında kendisini bir kutuda gizleyen ve zorla paketini açana kadar çıkmayı reddeden bir dosya. beni güldürürdü. : D
Mischa

121

Bash, 13 12

En kısa değil, ancak dosyayı gerçekten silmez veya sistemi kullanılamaz hale getirmez.

chmod 0 "$0"

Dosya adı boşluk içermiyorsa, 2 karakter kaydetmek için tırnak işaretlerini kaldırabilirsiniz.

açıklama

Tüm izinleri ( rwx) kendisinden kaldırır . İzinleri manuel olarak geri yüklemeden, ikinci kez çalıştırmaya veya hatta kodunu görüntülemeye çalıştığınızda, şöyle bir şey söyleyecektir:

bash: <FILENAME>: Permission denied

İzinleri geri yükle

chmod +rwx <FILENAME>

Eski versiyon

Yalnızca yürütme izinlerini kaldırır, ancak bir karakter daha uzundur ( değiştirilmeden önce bu bir ):

chmod -x "$0"

Asukasz Niemier tarafından sinsi versiyonu

#!/bin/chmod 0

4
chmod 0çok çalışır
gnibbler

@gnibbler thnx, eklendi

Sanırım programı arayabilir ave henüz 3 karakter kaydedebilirsiniz:chmod 0 a
yo '

temelde olsa aldatan

5
Hatta daha güzel#!/bin/chmod 0
Hauleth

112

6800 makine kodu - 1 bayt

0xDD

Bu HCF veya Halt ve Catch Fire olarak bilinir.


78
Kurallar, "Sadece bir yeniden başlatma veya durdurma başlatan herhangi bir cevap diskalifiye edilecek" diyor, ancak bu sadece bir durdurma başlatmıyor, çünkü aynı zamanda ateş yakıyor. Böylece, +1!
Trejkaz

94

Kabuk + sed, 16 bayt

Diğer cevapların bazıları kadar yıkıcı değil ;-)

Bu komut dosyası #her satırın başına bir yorum ekler :

sed -i s/^/#/ $0

3
Nasıl hakkında sed -i g $0?
seshoumara

91

Commodore 64 TEMEL

Bu programı silmez.

1 POKE 2048,1

Kendini imha

Göre Commodore 64 hafıza haritası , adres 2048kullanılmayan, ancak bir değer içermelidir 0TEMEL programı ÇALIŞTIRIN böylece.


1
Dürtme basitçe bir değişkeni bir yere mi taşır?
ojblass

12
@Ojblass evet, etkili bir şekilde. poke a, bC koduna eşittir *((unsigned char *)a) = b;.
Jules

4
FaceBook dürtmelerimin bu şekilde görünmesini istiyorum!
Sunny R Gupta,

3
Ah vay ... C64 ve TEMEL'den PEEK ve POKE'yi hatırlıyorum! Bu şeyleri 1977 civarında yazıyordum.
Fixee

Not: 0Kod satırlarının sonunu işaretlemek için bir bayt kullanılır; bu nedenle, 0x800 adresinin ilk kod satırının başlangıcını işaretlemek için büyük olasılıkla bir adresi gerekir.
Titus

89

Varsayım: Solaris Koşu, root olarak giriş yapmış

killall

3
Solaris gerçekten böyle bir şeye sahip mi?
ojblass

21
Evet, sadece teneke söylediklerini yapar ve çalışan tüm işlemleri öldürür .
Greg Hewgill

sizin için bir oy!
ojblass

9
1, soru hiçbir kök erişimine izin verilmediğinden bahseder.
user80551

119
@ user80551 bu kuralın nedeni o.
Seiyria

68

Python, 18

open(__file__,'w')

Yalnızca yazma modunda açarak dosyayı keser.


14
Sadece ciddiysen, kendini açar ( __file__kendi dosya adına atıfta bulunur). Açılış wmodu temelde tamamen iyileştiriyor, dosyayı keser.
Bob

7
Ben düşünüyorum kesilme açık olur, ama ne olursa olsun Python çalışma zamanı programı sonunda tüm açık dosyaları yıkamalı ve işlem sona erdiğinde Python veya işletim Ya onları kapatacak. Elbette, onlarla işiniz bittiğinde açık kulpları açıkça kapatmak genellikle iyi bir uygulamadır.
Bob,

5
Python'da dosyaları işlemenin "doğru" yolu ile ... er, with. with open("myfile.txt","r") as thefile:ve sonra dosya işleme kodunuz, işiniz bittiğinde dosyayı otomatik olarak kapatır.
Schilcote

1
Bu gibi bir şey için kısaltılabilir open("f.py","w").
Ethan Bierlein


66

Toplu iş: 5 bayt

%0|%0

Temelde Windows için bir çatallı bomba.

Uygulamaya ilk argüman iki kez başlar. Verimli bir ortamda çalıştırmayın;)


83
Verimli bir pencere ortamı var mı? (Tabii ki şaka yapıyorum).
orion

17
çok masum görünüyor!
ojblass

15
Tamam, kesinlikle bunu denemeyin. İyi gitmedi.
rmobis

75
Oy kullanma yetkisine sahip olmamakla birlikte, mümkün olan en ağır şekilde "sadece bir kez koşar" ı ihlal ediyor.
Xan

14
Bir insanın sadece bir kere çalıştırdığına ve nitelendirildiğine inanıyorum.
ojblass

54

JavaScript

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

İlk çalıştırdığınızda, iyi çalışacaktır:

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

Daha fazla çalıştırmayı denerseniz (yeniliyorsanız bile), bir hata alırsınız:

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

5
Bu yüzden çok kez çalıştırırsanız, Batman temasını alırsınız. Bunun için +1.
Hankrecords

2
@Hankrecords Ne yazık ki, gerçekten değil, çünkü bu daha sonra yürütülmeyecek ...
RedClover

@Soaku Bummer ...
Hankrecords

@Hankrecords kaldırmazsanız eval, ancak o zaman bu zorluğu
çözmez

46

IBM'in VM Hypervisor'unda konuk olarak çalışan tek kullanıcılı bir işletim sistemi olan IBM'in CMS İşletim Sistemi, ilginç bir dosya yapısına sahiptir.

Dosyalar üç öğeden oluşur, Dosya Adı, Dosya Türü ve Dosya Modu. Dosya Modu, açıklama kolaylığı için Windows / MS-DOS Sürücü Mektupuna benzer şekilde değerlendirilebilecek tek bir alfabetik ve tek bir sayısal rakam olan iki öğeden oluşur.

Tek sayısal basamağın anlamı vardır: http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm ve bu görev için ilginç olan 3 sayısı:

Dosya Modu Numarası 3
Dosya modu numarası 3, dosyaların okunduktan sonra silineceği anlamına gelir. Mini disklerinizde veya SFS dizinlerinde kopyalarını saklamak istemiyorsanız, 3 numaralı dosya modunu kullanabilirsiniz.

Bu yüzden, senaryoyu yazmak için saat harcayın ve 'LOST FOREVER A3' olarak kaydedin. Çalıştır, ilk defa çalışıyor. Evden çık, iyi iş çıkar.

Not, silinmeyi belirten hiçbir mesaj üretilmez. Sonuçta, herkes bunun ne anlama geldiğini biliyor 3, değil mi?

Aslında elbette çok faydalı. Sınama tamamlandığında, 3geçici dosyaları kullanmak için kullanabilirsiniz ve daha sonra temizlemeniz gerekmez, çünkü bunlar bir kez okundu dosyalarıdır.


44

Commodore 64 TEMEL

0 NEW

NEW programı siler.


1
Bu ne işe yarıyor?
Darth Egregious

3
@ user973810 temel hatırlıyorsam, yeni hafıza temizliği için, bu yüzden programı silecek
user902383

3
Güzel. Commodore 64'e özgü değil, muhtemelen 80'li yılların hemen hemen her 8-bit BASIC makinesinde olduğu gibi çalışıyor ...
ysap

ESKİ veya Ö de olabilir. 12 aylık 12 aylık oyun kodlama dehası yeniydim; Ardından yanlışlıkla eski yerine saklanır. O. artık işe yaramadı :( Onaltılık editörlerin oldukça keskin olmasına rağmen nasıl çalıştığını öğrendim :)
Matt Warren

3
@Yap: 1 satır numarası olarak kullanıyor olsaydı daha taşınabilir olurdu; tüm BASIC uygulamaları satır numarası 0'ı desteklemez.
celtschk

41

Bash, 12

Not: Bu yıkıcıdır.

:(){ :|:&};:

Popüler bash çatal bomba. Tüm hafızayı üssel olarak yiyor ve PID sistemi kilitliyor. Sert bir yeniden başlatma, neden bunu yapmak isteseniz de, kodun tekrar çalıştırılmasına izin verecektir.


Bash, 10

:(){ :&};:

İki daha az karakter için bu, belleğinizi doğrusal olarak tüketir.


Bash, 7

w;PATH=

w düşünebildiğim en kısa çalıştırılabilir olarak seçildi.

Bu sadece yol değişkeni siler, böylece kabuk bir /usr/bin/wdahaki sefere bulamaz . Kabuğu yeniden başlatmak, yolun genellikle içinde depolandığı için onu düzeltir.~/.profile


Kahretsin: DI aynı fikirde: P
Knerd

1
:(){ :&};:hafızanı yememelisin. Çatal kırıldığı anda durur, bu yüzden sadece O(1)aktif olanlar vardır. Sen yaptın while(fork());, hafızanızı lineer olarak ne yiyecekti eşdeğeri fork(); while(1);.
marinus

26
Vaov! bunlar bazı ölümcül ifadeler! Bilgisayarımı bign kaşlı su yüzüne çağırıyorum :(){ ....
Level River St

1
Doğru hatırlıyorsam ... çatal bomba periyodik olarak bir PID'yi açık bırakır. Senaryo bu aralıkta tekrar çalıştırılabilir ... ve eğer sayılmazsa, bütün çatalları biraz çaba sarf ederek öldürmek mümkündür. Yeniden başlatma, sadece en kolay çözümdür.
Brilliand

11
Bunun yeterli olduğunu sanmıyorum. Komut dosyasının tekrar çalışmasını imkansız kılmaz, bunun yerine tekrar çalıştırıldığını garanti eder (birçok kez).
Ben Voigt

20

C #

Kendini silmek için en kısa kod

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

Kullanıcı arabiriminde farkedilemez kılmak için kod

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
Sonunda, bir C # cevap!
Pharap

Tercih neden gerekli?
wizzwizz4

19

C ++ 71

Çalıştırılabilir dosya "golf" bir dahaki sefere çalıştırmak için izin verilmedi.

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

Konsol testi ile JavaScript / HTML 137, 145

<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
JavaScript bağlamında @Templar, sayfayı yenilemenin yeniden başlatmadan sayıldığını düşünüyorum (belki?)

2
Komut dosyasını sayfadan kaldırmamış olsanız bile, yine de yalnızca bir kez çalıştırılır. Bunun bir anlamı yok.
nderscore

2
@ nderscore İşlev h , yalnızca bir kez çalıştırılacak olan gibi görünüyor . Aslında başka bir yerden aramanız gerekir (sanırım bir programı çalıştırmaya benzer). Söyle <button onclick="h();">.
Bob,

4
Sayfanın yeniden yüklenmesine izin verildiğinden ve amacınız, yalnızca önceden yüklü iken h'nin birden fazla kez çalıştırılmasını önlemek içindir, yanlış olan ne function h(){h=0}?
Keen

1
İle #include <sys/stat.h>erişebileceğiniz chmodepeyce bayt tasarrufu işlevi doğrudan ( <stdlib.h>artık ihtiyaç vardır ve ne olduğunu system). Ayrıca, gerek yok return.
Ben Voigt

19

Adım Kabuk ... PowerShell

Klasik kendini imha eden mesaj:

@'
##################################
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})

Açıklama, lütfen?
noɥʇʎԀʎzɐɹƆ

@ noɥʇʎԀʎzɐɹƆ 13'e kadar olan satırlar sadece saçmalıktır. Bundan sonra, diğer kabuklarda olduğu gibi, PowerShell çalışan betiği belleğe yükler ve böylece artık orijinal komut dosyasına gerek duymaz ... böylece kendini siler.
SomeShinyObject

18

Bash (5)

rm $0

Dosya adında boşluk olmadığını varsayalım.


40
Bu nedenle Unix, Windows'tan daha iyidir: del r yerine bir bayt kaydedildi.
MadTux

1
@MadTux Ben * nix'i Unix'e tercih ederim.
wizzwizz4

14

sh

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

Sistemi bir kez yeniden kuracak ve betiği yeniden koyacak olsanız bile, yalnızca bir kez çalışır (ve çalışırsa "Merhaba, dünya!" Mesajı görüntülenir).


EDIT: Runonce'un arkasında bir senaryo yayınlayacağımı düşündüm. Her iki şekilde de serbest bırakılmaması gerektiği gibi özel bir şey yok, ama her neyse.

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

Veritabanı şemasının yanı sıra

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

Veriler Heroku'nun veritabanında saklanmaktadır, isterseniz gizlilik politikasını kontrol etmekten çekinmeyin . Veritabanında depolanan verileri kontrol etmiyorum, yalnızca kodun bir kez çalışmasına izin vermek için saklanır.


4
Bunun birden çok kez çalışacağını, ilkinden sonra sadece çıktı üretmediğini iddia ediyorum.
Brilliand

5
Bu bir keresinde benim için "Merhaba Dünya" göstermedi.
Paŭlo Ebermann

1
@ StéphaneGourichon: Evet, IP'leri hatırlar ve otomatik çıkarmadan önce IP'yi çıkarmanın bir yolu yoktur. Kaynak kodu koymaya karar verdim, böylece ne yaptığını kontrol edebilirsiniz.
Konrad Borowski

1
@ StéphaneGourichon: pg_query_paramshemen hemen SQL enjeksiyonundan koruyor. Ancak '; DROP TABLE users;--geçerli bir IP olmadığı için ( inetyalnızca IP'leri kabul eder) kaydedilmez ve bu nedenle sahte bir X-Forwarded-Forbaşlığınız varsa ziyaretiniz kaydedilmez. Kendim için bir sorun olarak görmüyorum.
Konrad Borowski

2
Bunun standart bir boşluğun ihlali olduğuna inanıyorum: Asıl cevabı dış kaynak kullanımı .
juniorRubyist

12

PHP, 22 20 karakter

<?=unlink(__FILE__);

EDIT: Yorum başına sonunda iki karakter kaldırıldı.


2
Bu şu şekilde daha da basitleştirilebilir: <?unlink(__FILE__);takip ?>gerekli değil
leepowers

Başlamak zorundasınız <?=veya başlangıç ​​etiketi tanınmıyor.
Michael Mior

2
PHP kendini yok ediyor ... ha! E_NOTICE hattı 3048
15

<?+ boşluk da tamam. Kısa etiketten sonra bir harfi kullanamazsınız.
Titus

11

Yakut, 14

Kaynak kodunu programın adı olarak yeniden yazar.

IO.write $0,$0

3
Ve eğer program "IO.write $ 0, $ 0" ise? "Varsayım: Programa, herhangi bir dilde geçerli kod olmayan bir ad verin."
Brilliand

@Brilland bir yakut programı her zaman bitmeli .rbve adı "IO.write $ 0, $ 0 # .rb" olsa bile çalışmaz çünkü yazarken tam yolu içerecektir.
Mhmd

3
@ Yakut bir yakut programı her şeyle bitebilir. Örneğin gemve irbuzantısı olmayan Ruby programları.
bfontaine

@bfontaine Hangi shebangs var. Bu değil.
wizzwizz4

@ wizzwizz4 Shebangs'ın bu uzantıyla ilgisi yok. ruby foove ruby foo.rbbir shebang ile birlikte veya olmadan aynı çalışacaktır. ./foove ./foo.rb(çalıştırılabilir olduklarını varsayarsak), her ikisi de ağzı açık olmadan başarısız olur ve başarılı olur (doğru kodu varsayarsak, vb.).
bfontaine

10

Toplu iş (6 karakter)

Bu dosyayı silmek için iznimiz olduğunu ve tabii ki Windows'ta da yapılabileceğini varsayıyor (belki de MS-DOS).

del %0

10

Bash 9 8 Karakterler

nc -l 1&

Bağlantı noktası sonsuza dek engellendiği için yalnızca bir kez çalışacak.


1
Bence bu işe yaramıyor çünkü 0özel bir liman. Bunu bilgisayarımda çalıştırdığımda birden çok kez açabilirim. Ayrıca, bu bir porttur < 1024, yani dinlenmesi için root erişimi gerektirir.
heinrich5991

nc -l 1&0Son boşluğa ihtiyaç duyulmadığından sorunu giderir ve bir bayt kısalır.
kasperd

@kasperd Girişiniz için teşekkürler :-)
Falco

@ heinrich5991 tamam - 9654 gibi bir Port kullanmak için root erişimi olmayan 11 karaktere ihtiyacım olacak
Falco

Neden reddettiğini açıklamak ister misin?
Falco

9

DüğümJS - 33 bayt

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

Bunun, dili bilmeyenler için neler yaptığını açıklayabilir misiniz?
Kyle Kanos

1
@KyleKanos Dosya sistemi modülünü fsve geçerli dosya adını alır ve bu dosya adını dosya sisteminden __filenamekaldırır.
Keen

7
Noktalı virgül seçilebilir, çünkü bunlar JavaScript'te isteğe bağlıdır.
Haziran'da

8

Toplu, 7 karakter

Bunu denemeden önce kaydedilmemiş işleri kaydedin.

64 bitlik bir sistem veya <2 GB RAM belleğe sahip 32 bitlik bir sistem varsayar. Başlatılmadan önce bir .bat veya .cmd dosyasına kaydedilmiş olması gerekir, sadece cmd.exe de girerek çalışmaz.

^ nul<^

Tam bir CPU çekirdeği tüketir ve RAM belleğinizi saniyede birkaç yüz megabayt hızında doldurur. Zamanında durdurmazsanız (Görev Yöneticisi), bilgisayarınızdaki her RAM baytını tüketir, tüm sisteminiz donar ve zorla kapanmadan bilgisayarınızı kesmeden önce bir şey yapamazsınız. güç düğmesini basılı tutun.

Tüm krediler bunun için StackOverflow'ta txtechhelp'e gitmektedir, burada daha fazla bilgi bulabilirsiniz: https://stackoverflow.com/q/23284131/1955334


Bu nasıl mümkün olabilir? Peki ya çağrı? İşlem önceliği?
Nicolas Barbulesco

Bu senaryoyu ben koştum, hiçbir şey olmadı.
Pavel,

@Pavel Windows 10'da düzeltildiğini tahmin ediyorum o zaman. Windows 10'da çoğaltamıyorum, ancak Windows 8.1'de çalışıyor.
bilde2910

1
"Tam bir CPU çekirdeği tüketir ve RAM belleğinizi saniyede birkaç yüz megabayt hızında doldurur. Zamanında durdurmazsanız (Görev Yöneticisi), bilgisayarınızdaki tüm RAM baytlarını tüketir. donacak ve zorla kapatmadan önce bir şey yapamazsınız ve bilgisayarınızı keserek ya da güç düğmesini basılı tutarak bilgisayarınızı yeniden başlatın. " Bilgisayarlar için bir korku hikayesi gibi geliyor ...
noɥʇʎԀʎzɐɹƆ

7

İşte bir çift. Pek çoğunun aksine, bunlar yıkıcı değil, sadece yaratıcı ve sıradışı.

darbe

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

Bu oldukça basit. Değişken $REPLYörtük olarak oluşturulur read, ancak boş bir bültenle doldurulur. Bu boş dize printfgeçerli betiğin içine yazılır. Aşağıdakilerin oldukça karışık bir karşılığıdır:

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

Windows Toplu İşi

copy con %0 < nul

İkincisi temelde okunan konsol girişini nulgeçerli dosyaya kopyalar .


Bu bir popülerlik yarışması olduktan sonra gönderildi
Isiah Meadows

1
İlki kök izinleri olmadan çalışmaz. Neden null cihazı değiştirmeye çalışıyorsun? Kök olarak çalıştırıldığında, bu aslında sistemin kararsız davranmasını sağlar. Ayrıca üzerine yazarken boşluğun üzerine yazıyorsunuz :) Neden sadece başka bir yere taşımıyorsunuz? Mv "$ 0" "$ {0} x" gibi bir şey mi? Hile yapmalı.
orion

Daha sonra dosya hala var mı?
Isiah Meadows

Şimdi Bash örneğini tamamen değiştirdim.
Isiah Meadows

Bunlar nasıl yıkıcı değil?
ysap

7

Sinclair TEMEL

10 POKE 23635,255

Yanlış veriyi tercüman tarafından bulması için BASIC programının adresini hafızada olması gerektiği yerden (203) uzaklaştırır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.