한 번만 실행되는 코드


223

이 과제의 목표는 한 번만 실행될 코드를 작성하는 것입니다. 이것은 기본적으로 프로그램, 스크립트 또는 환경이 어떤 식 으로든 손상된다는 것을 의미합니다. 시스템을 재부팅하면 코드를 다시 실행할 수 있으며 허용됩니다.

채점

투표 수. 모든 가정이 명확하게 나열되어야합니다. 재부팅이나 중지를 시작한 응답은 모두 실격 처리됩니다.

Greg Hewgill은 죽음의 신이기 때문에 추가 규칙

루트 액세스가 허용되지 않습니다.

종료일

대회는 2014 년 5 월 31 일에 종료됩니다.

편집하다

이 콘테스트는 인기 콘테스트로 변경되었습니다.


7
@PeterTaylor 가능한 해결책은 자체 삭제 일 것이지만 결과가 표시하는 것은 유일한 것이 아닙니다.
Lukei

101
vi단일 터미널 환경에서 전화를하는 많은 사람들 에게이 효과가 있습니다. 재부팅하지 않으면 탈출 할 수 없습니다 :) 여기서 농담.
오리온

6
그러한 질문을 제안 할 수있는 사이트는 무료입니다.
ojblass

16
echo "If you try to execute me again, it means you are an idiot.";<-아무도 두 번 이상 실행하지 않습니다 : P
user3459110

25
미사일 관련 소프트웨어는 자격이 있습니까? ;)
rsegal

답변:


518

불침번

마지막으로 Vigil의 사용 사례!

def main():
  raise Exception()

"언어 사양"에서 발췌 :

잡히지 않은 예외를 던지는 함수가 잘못되어 처벌되어야 한다는 것은 말할 필요도 없습니다 .

...

맹세가 깨지면 문제가되는 기능 [...] 이 정식으로 처벌됩니다.

어떻게?

단순 : 소스 코드에서 삭제됩니다.

프로그램이이를 수행하지 못하는 코드를 절대로 금지하는 요구 사항을 충족시키는 유일한 방법입니다. Vigil을 사용하면 자동으로 이를 수행합니다 .

철야는 키워드를 제공하기 때문에이 작업을 수행하는 다른 방법이있다 implore하고 swear있는이 기본적으로 특정 사전 및 사후 조건을 준수하는 맹세 있습니다 :

def main():
  swear 0 > 1

116
의심 할 여지없이, 이길 가치 가 있습니다.
Matteo Italia

77
마지막으로, 현대 시대에 충분히 경계하는 언어! 프로덕션 환경에서 사용을 시작하겠습니다. 모든 버그를 제거해야합니다.
Claudiu

13
나에게 그것은 잡히지 않은 예외를 던지는 함수의 결함 일 필요는 없으며, 호출 스택의 함수가 그것을 잡지 못하는 데 무시할 수도 있습니다. 전체 응용 프로그램의 아키텍처에 결함이 있음을 암시 할 수도 있습니다 (코드를 재구성하지 않고 해당 예외를 올바르게 처리 할 수있는 방법이 없기 때문에) 전체 프로그램을 삭제해야합니다.
Jonathan Pullano


32
맹세에 대한 추가 포인트. 의심의 여지가없는 자신감있는 프로그램은 반드시 제거해야합니다.
오리온

293

거의 모든 Linux 배포판, 9 자

이것은 고전입니다!

#!/bin/rm

이것을 파일에 넣고 실행하십시오.

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

Aaand 그것은 갔다!

무슨 일이 일어나고 있는지 : 난 정말 실행 중입니다 rm! shebang#! 이라고합니다 . 그리고 스크립트 중 첫 번째 줄로 실행 파일에 대한 경로 다음에 하나의 실행 파일 경로를 넣으면 프로그램 로더는 사용자가 작성한 모든 것을 사용하여 스크립트 파일을 실행합니다-기본값은 보통 또는 (Bourne-again shell / Bourne shell) . 이 스크립트에 전달 된 첫 번째 인수는 파일 이름 자체입니다 ( 여기에서 또는 등을 포함하여 많은 솔루션을 볼 수 있습니다). 내 파일을 포함 하고 실행하면 파일의 파일 이름을에 전달하는 것 입니다.#!/bin/bash#!/bin/sh%0$0#!/bin/rmrm


9
Linux를 직접 사용하지 않고 스크립트 파일을 삭제 한다고 생각 합니다.
OUurous

56
@NateKerkhofs #!시퀀스는 shebang을 시작하는데, 이것은 스크립트에 일반적으로 어떤 인터프리터를 사용할 것인지 식별합니다 /bin/bash. 여기서 Flonk는 /bin/rm"통역사"로 사용 되었습니다. rm파일을 삭제하는 프로그램입니다. 리눅스는 우리 rm가 인터프리터 가되고 싶다고 생각하기 때문에 파일 이름을 인자로 전달합니다. 따라서 파일 자체가 삭제됩니다

19
이것은 히스테리
ojblass

25
@ user80551 이것을 위해 루트 액세스가 필요하지 않습니다.
Flonk

9
흠 ..../foo mbox
이즈 카타

241

x86 바이너리, 4 바이트

F0 0F C7 C8

가정 : P5 Pentium CPU에서 실행해야합니다.

위의 명령어는 일반적으로 F00F 버그라고 합니다. lock 접두사가 붙은 잘못된 명령을 실행하려고 시도합니다 .

이렇게하면 CPU가 완전히 정지되고 (정지 또는 재부팅이 아님) 루트 액세스가 필요하지 않습니다.


4
와우 .. 정말 재미있다.
ojblass

31
@ JackM : 그것은 할 것이지만 질문에 명시 적으로 허용됩니다.
Dennis

34
@JackM, "스크립트"실행을 중지하는 좋은 방법 인 것 같습니다.
Paul Draper 2018 년

5
이 버그가 언제 진행되고 있는지 기억합니다. 커널 사이드 해결 방법은 거의 즉시 발견되었습니다. 패치없이 OS를 실행하지 않으면 컴퓨터가 충돌하지 않습니다.
zwol

3
분명히 @RosLuP 209 명의 다른 사용자. 동의하지 않으면 공감하고 계속 진행하십시오.
Dennis

150

배쉬, 5

>"$0"

길이를 0으로 자릅니다.

파일 이름에 공백이 없으면 3>$0 자를 사용할 수 있습니다 !


2
실제로 쉘 구문 분석 규칙의 특별한 경우로 인해 프로그램이나 프로그램 경로에 공백이 포함되어 있어도 이와 같이 경로 재 지정 파일 이름에 사용 된 변수에는 따옴표가 필요하지 않습니다. 그래서 당신은 항상 3 문자로 할 수 있습니다!
apenwarr 2016 년

3
@apenwarr 그것이 말하는 "$ 0 : 모호한 리디렉션"시세 및 파일 이름이없는 공백 포함

1
@apenwarr, 스크립트를 해석하는 쉘이 ksh88을 기반으로하거나 posix 모드가 아닌 bash 인 경우 필요합니다. 그것은 공간에 관한 것이 아니며, $IFSbash의 문자와 bash 및 ksh88의 와일드 카드 문자에 관한 것입니다. she-bang less 스크립트는 일반적으로 시스템의 sh에 의해 해석되지만 bash 및 ksh88을 포함한 일부 쉘은 대신 자체의 자식으로 해석합니다.
sch

144

gzip

#!/bin/gzip

비파괴적인 명령 줄 도구에 익숙한 사람들에게 많은 성가심을주기 위해, gzip기본적으로 원본 파일을 망쳐 서 파일을 gzipped 버전으로 대체합니다 (접미사 추가).

이것은 #!/bin/rm사람이 직접 개입하여 복구 할 수 있다는 점을 제외하고 는 옵션 에 대한 변형입니다 gunzip. 특별 보너스로 결과 파일은 원본보다 훨씬 길다 (차이는 파일 이름 길이에 따라 다름).

경고 : 위치 gzip는 다를 수 있습니다.

편집 : WChargin이 지적한 것처럼, 이것은 더 이식성이 있습니다.

#!/usr/bin/env gzip

파일의 나머지 부분에는 내용이있을 수 있습니다. 이 파일은 본질적으로 호출 될 때 상자에 숨겨져 서 강제로 압축을 풀 때까지 나오지 않는 파일입니다.


7
나는 전에 그것을 생각하지 않았지만 당신은 절대적으로 정확합니다.
ojblass

매우 흥미로운
Grijesh 차우

11
"경고 : 위치 gzip가 다를 수 있습니다"— 이것은 코드 골프 가 아니므로 다음을 사용할 수 있습니다#!/usr/bin/env gzip
wchargin

37
+1 It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.당신이 내 하루를 만들었습니다. 그리고 오전 1시입니다.
박수

이 파일은 본질적으로 호출 될 때 상자에 숨겨져 서 강제로 압축을 풀 때까지 나오지 않는 파일입니다. 나를 웃게했다. : D
Mischa

121

배쉬, 13 12

가장 짧지는 않지만 실제로 파일을 삭제하거나 시스템을 사용할 수 없게 만드는 것은 아닙니다.

chmod 0 "$0"

파일 이름에 공백이 없으면 따옴표를 제거하여 2자를 저장할 수 있습니다.

설명

rwx자체에서 모든 권한 ( )을 제거 합니다. 권한을 수동으로 복원하지 않고 실행하거나 코드를 두 번 보려고하면 다음과 같이 표시됩니다.

bash: <FILENAME>: Permission denied

다음으로 권한을 복원하십시오.

chmod +rwx <FILENAME>

구 버전

실행 권한 만 제거하지만 한 문자는 더 깁니다 (이것은 변경되기 전에 질문 이었습니다 ).

chmod -x "$0"

Łukasz Niemier의 음흉 버전

#!/bin/chmod 0

4
chmod 0작동
gnibbler

@gnibbler thnx, 추가

나는 당신이 프로그램을 호출하고 a아직 3 개의 문자를 저장할 수 있다고 생각합니다 :chmod 0 a
yo '

@tohecz 기본적으로 부정 행위

5
더 좋은#!/bin/chmod 0
Hauleth

112

6800 기계 코드-1 바이트

0xDD

이것을 HCF 또는 Halt and Catch Fire라고합니다.


78
규칙에 따르면 "재부팅이나 중지를 시작한 응답은 모두 실격 처리됩니다."라고 말하지만 , 이는 화재를 유발하기 때문에 중지 시작 하지는 않습니다 . 따라서 +1!
Trejkaz

94

쉘 + sed, 16 바이트

다른 답변들만큼이나 파괴적이지는 않습니다. ;-)

이 스크립트 #는 모든 줄의 시작 부분에 주석 을 삽입 합니다.

sed -i s/^/#/ $0

3
어때요 sed -i g $0?
seshoumara

91

코모도어 64 베이직

이것은 프로그램을 삭제하지 않습니다.

1 POKE 2048,1

자기 파괴

Commodore 64 메모리 맵 에 따르면 주소 2048는 사용되지 않지만 0BASIC 프로그램을 실행할 수 있도록 값을 포함해야합니다 .


1
poke는 단순히 변수를 위치로 이동합니까?
ojblass 1

12
@ojblass 네, 효과적으로. poke a, bC 코드와 같습니다 *((unsigned char *)a) = b;.
Jules

4
그런 식으로 페이스 북 찌르기를 시각화하고 싶습니다!
Sunny R Gupta

3
와우 ... C64 BASIC의 PEEK와 POKE를 기억합니다! 나는 1977 년경에이 내용을 쓰고있었습니다.
Fixee

참고 : 0바이트는 코드 라인의 끝을 표시하는 데 사용됩니다. 따라서 주소 0x800은 첫 번째 코드 줄의 시작을 표시하는 주소가 필요할 것입니다.
Titus

89

가정 : 루트로 로그인 한 Solaris 실행

killall

3
솔라리스에는 실제로 그런 것이 있습니까?
ojblass

21
예, 그것은 주석에서 말한 것을하고 모든 실행중인 프로세스를 죽 입니다.
Greg Hewgill

하나는 당신을 위해 공감!
ojblass

9
1, 질문은 루트 액세스가 허용되지 않는다고 언급합니다.
user80551

119
@ user80551 그는 그 규칙의 이유입니다.
Seiyria

68

파이썬, 18

open(__file__,'w')

파일을 쓰기 전용 모드로 열어 파일을 자릅니다.


14
진지한 경우를 대비 __file__하여 자체적으로 열립니다 ( 자체 파일 이름 참조). w모드 에서 열면 파일이 잘리고 기본적으로 파일이 지워집니다.
Bob

7
나는 생각 잘라내 오픈에서 발생하지만,에 관계없이 파이썬 런타임은 프로그램의 마지막에 열려있는 모든 파일을 플러시해야하고, 프로세스가 종료 될 때 파이썬 또는 OS 중 하나는 그들을 닫습니다. '물론, 일반적으로 처리가 완료되면 열린 핸들을 명시 적으로 닫는 것이 좋습니다.
Bob

5
파이썬에서 파일을 처리하는 "올바른"방법은 다음과 같습니다. with open("myfile.txt","r") as thefile:그러면 파일 처리 코드가 완료되면 파일을 자동으로 닫습니다.
Schilcote

1
이것은 다음과 같이 단축 될 수 있습니다 open("f.py","w").
Ethan Bierlein 2016 년

1
whrn 된 .pyc 작동을 중단하지 않는 것은 남아
minmaxavg

66

배치 : 5 바이트

%0|%0

기본적으로 Windows의 지게차입니다.

앱은 첫 번째 인수를 두 번 시작합니다. 생산적인 환경에서 실행하지 마십시오.)


83
생산적인 Windows 환경이 있습니까? (물론 농담입니다).
오리온

17
너무 결백 해 보인다!
ojblass

15
좋아, 확실히 시도하지 마십시오. 잘되지 않았다.
rmobis 2016 년

75
하향 조정에 대한 담당자는 없지만 가능한 한 가장 심각한 방식으로 "한 번만 실행"을 위반합니다.
Xan

14
나는 인간이 한 번만 그것을 실행하고 자격이 있다고 믿습니다.
ojblass

54

자바 스크립트

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

처음 실행하면 정상적으로 실행됩니다.

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

새로 고쳐도 더 많이 실행하려고하면 오류가 발생합니다.

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

5
여러 번 실행하면 배트맨 테마가 나타납니다. +1입니다.
Hankrecords 2016 년

2
@Hankrecords 슬프게도, 나중에 실행되지 않을 것이기 때문에 실제로는 아닙니다 ...
RedClover

@Soaku Bummer ...
Hankrecords

@Hankrecords를 제거하지 않으면 eval, 그러나이 도전을 수행하지 못할 것입니다
RedClover

46

IBM의 VM 하이퍼 바이저에서 게스트로 실행되는 단일 사용자 운영 체제 인 IBM의 CMS 운영 체제에는 흥미로운 파일 구조가 있습니다.

파일은 파일 이름, 파일 형식 및 파일 모드의 세 가지 요소로 구성됩니다. 파일 모드는 설명을 쉽게하기 위해 Windows / MS-DOS 용 드라이브 문자와 비슷한 방식으로 단일 알파벳과 단일 숫자로 구성된 두 가지 요소로 구성됩니다.

단일 숫자는 http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm이며이 태스크의 의미입니다. 흥미로운 숫자 3입니다.

파일 모드 번호 3
파일 모드 번호 3은 파일을 읽은 후에 지워짐을 의미합니다. 미니 디스크 나 SFS 디렉토리에 사본을 유지하지 않으려면 파일 모드 번호 3을 사용할 수 있습니다.

스크립트를 작성하고`LOST FOREVER A3 '으로 제출하십시오. 그것을 실행하면 처음으로 작동합니다. 집에 출발, 잘 했어요

삭제를 나타내는 메시지가 생성되지 않습니다. 결국, 모든 사람들은 그것이 무엇을 3의미 하는지 알고 있습니다 .

실제로 매우 유용합니다. 일단 테스트가 완료되면 3임시 파일을 위해 for를 사용할 수 있으며, 한 번의 읽기 파일이므로 나중에 정리할 필요가 없습니다.


44

코모도어 64 베이직

0 NEW

NEW 프로그램을 삭제합니다.


1
그게 뭐야?
Darth Egregious

3
내가 기본 기억한다면 @ user973810, 새로운 메모리를 청소, 그래서 프로그램 삭제합니다
user902383

3
좋은. Commodore 64에만 해당되는 것은 아니며 80 년대의 거의 모든 8 비트 BASIC 머신에서 작동합니다.
ysap

OLD 또는 O도 가능합니다. 나는 12 개월 된 12 살짜리 게임 코딩 천재를 새로 썼다. 그런 다음 실수 대신 구식으로 저장했습니다. O. 더 이상 일을 일부러 :( 헥스 편집기 :하지만 꽤 sharpish 일을 어떻게 배웠는가
매트 워렌

3
@ysap : 줄 번호로 1을 사용하면 더 이식성이 좋습니다. 모든 기본 구현이 라인 번호 0을 지원하는 것은 아닙니다.
celtschk

41

배쉬, 12

참고 : 이것은 파괴적입니다.

:(){ :|:&};:

인기있는 배쉬 포크 폭탄입니다. 지수 적으로 모든 메모리를 소비하고 PID는 시스템을 잠급니다. 하드 재부팅하면 코드를 다시 실행할 수 있지만 왜 그렇게 하시겠습니까?


배쉬, 10

:(){ :&};:

적은 양의 문자는 메모리를 선형으로 먹습니다.


배쉬, 7

w;PATH=

w 내가 생각할 수있는 가장 짧은 실행 파일로 선택되었습니다.

이것은 단순히 경로 변수를 지우므로 다음에 쉘을 찾을 수 없습니다 /usr/bin/w. 경로가 일반적으로 저장되어 있으므로 셸을 다시 시작하면 수정됩니다.~/.profile


Darn it : DI는 단지 같은 생각을 가지고있었습니다 : P
Knerd

1
:(){ :&};:당신의 기억을 먹지 않아야합니다. 포크를하자마자 멈 춥니 다 O(1). 당신이 한 일은 while(fork());, 당신의 기억을 선형으로 먹는 것은와 같습니다 fork(); while(1);.
marinus

26
와! 그것들은 치명적인 이모티콘입니다! 난 내 컴퓨터 bignosed frownyface 전화하지 않는 것이 가장 좋습니다 :(){ ....
Level River St

1
내가 정확하게 기억한다면 ... 포크 폭탄은 주기적으로 하나의 PID를 열어 둡니다. 이 간격으로 스크립트를 다시 실행할 수 있습니다. 카운트가 맞지 않으면 약간의 노력으로 모든 포크를 죽일 수 있습니다. 재부팅은 가장 쉬운 솔루션입니다.
Brilliand

11
나는 이것이 자격이 있다고 생각하지 않습니다. 스크립트를 다시 실행하는 것이 불가능하지는 않지만 스크립트가 다시 실행되도록 보장합니다 (다수).
Ben Voigt

20

씨#

자체 삭제를위한 가장 짧은 코드

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

UI에서 눈에 띄지 않게 만드는 코드

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
마침내 C # 답변!
Pharap

선택이 필요한 이유는 무엇입니까?
wizzwizz4

19

C ++ 71

실행 파일 "golf"는 다음에 실행할 권한이 거부되었습니다.

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

콘솔 테스트를 통한 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의 맥락에서 @Templar, 나는 페이지를 새로 고치는 것이 재부팅하는 것으로 간주한다고 생각합니다.

2
페이지에서 스크립트를 제거하지 않더라도 여전히 한 번만 실행됩니다. 아무 의미가 없습니다.
nderscore

2
@nderscore 함수 h 가 한 번만 실행될 것 같습니다 . 실제로 다른 곳에서 호출해야합니다 (프로그램 실행과 유사합니다). 말해봐 <button onclick="h();">.

4
페이지를 다시로드 할 수 있으며 목표는 이미로드 된 상태에서 h가 두 번 이상 실행되지 않도록하는 것입니다 function h(){h=0}.
Keen

1
를 사용 #include <sys/stat.h>하면 chmod함수에 직접 액세스하여 상당히 적은 바이트를 절약 할 수 있습니다 ( <stdlib.h>더 이상 필요하지 않으며 system). 또한 return필요 하지 않습니다.
Ben Voigt 2016 년

19

내 이름의 껍질 ... PowerShell

고전적인 자기 파괴 메시지 :

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

설명 해주세요
noɥʇʎԀʎzɐɹƆ

@ noɥʇʎԀʎzɐɹƆ 13까지 줄은 말도 안됩니다. 그 후 다른 셸과 마찬가지로 PowerShell은 실행중인 스크립트를 메모리에로드하므로 더 이상 원본 스크립트 파일이 필요하지 않으므로 자체 삭제됩니다.
SomeShinyObject

18

배쉬 (5)

rm $0

파일 이름에 공백이 없다고 가정합니다.


40
이것이 Unix가 Windows보다 나은 이유입니다. del 대신에 rm이 바이트를 절약했습니다.
MadTux

1
@ MadTux 나는 유닉스보다 * nix를 선호합니다.
wizzwizz4

14

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

시스템을 다시 설치하고 스크립트를 다시 넣어도 한 번만 실행됩니다 (실행중인 경우 "Hello, world!"로 표시됨).


편집 : 나는 runonce 뒤에 스크립트를 릴리스 할 것이라고 생각했다. 어떤 식 으로든 릴리스되지 않았으므로 특별한 것은 없습니다.

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

뿐만 아니라 데이터베이스 스키마

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

데이터는 Heroku의 데이터베이스에 저장되며 원하는 경우 개인 정보 보호 정책 을 확인하십시오 . 데이터베이스에 저장된 데이터를 확인하지 않고 코드가 한 번만 실행될 수 있도록 순수하게 저장됩니다.


4
나는 이것이 여러 번 실행될 것이라고 주장하고, 첫 번째 후에는 아무 것도 출력하지 않습니다.
Brilliand

5
그것은 한 번도 "Hello World"를 보여주지 않았습니다.
Paŭlo Ebermann 2018 년

1
@ StéphaneGourichon : 예, IP를 기억하며 자동 제거 전에 IP를 제거 할 수있는 방법이 없습니다. 소스 코드를 작성하여 소스 코드를 확인하기로 결정했습니다.
Konrad Borowski 2016 년

1
@ StéphaneGourichon : pg_query_paramsSQL 인젝션으로부터 거의 보호합니다. 그러나 '; DROP TABLE users;--유효한 IP가 아니기 때문에 (IP inet만 허용) X-Forwarded-For저장되지 않으므로 가짜 헤더가 있으면 방문이 저장되지 않습니다. 나는 그것이 스스로 문제라고 생각하지 않습니다.
Konrad Borowski

2
나는 이것이 표준 허점을 위반한다고 생각합니다 : 실제 답변 아웃소싱 .
juniorRubyist

12

PHP, 22 자 20 자

<?=unlink(__FILE__);

편집 : 주석 당 끝에 두 문자를 제거했습니다.


2
다음과 같이 더 단순화 할 수 있습니다 <?unlink(__FILE__);. 후행 ?>이 필요하지 않습니다
leepowers

시작해야합니다 <?=. 그렇지 않으면 시작 태그가 인식되지 않습니다.
Michael Mior

2
PHP는 스스로를 파괴 ... ha! E_NOTICE 3048 행
metadings

<?+ 공간도 괜찮습니다. 짧은 태그 뒤에는 글자를 사용할 수 없습니다.
Titus

11

루비, 14

소스 코드를 프로그램 이름으로 다시 작성합니다.

IO.write $0,$0

3
프로그램 이름이 "IO.write $ 0, $ 0"이면 어떻게됩니까? "가정 : 어떤 언어의 코드도 유효하지 않은 프로그램 이름을 지정하십시오."
Brilliand

@Brilland 루비 프로그램은 .rb이름이 "IO.write $ 0, $ 0 # .rb"인 경우에도 항상 끝나야하며 , 작성할 때 전체 경로를 포함하기 때문에 작동하지 않습니다.
Mhmd

3
@Mhmd 루비 프로그램은 무엇이든 끝낼 수 있습니다. 예를 들어 gemirb확장자가없는 루비 프로그램입니다.
bfontaine

@bfontaine 어느 세방이 있습니다. 그렇지 않습니다.
wizzwizz4

@ wizzwizz4 Shebangs는 확장 기능과 아무 관련이 없습니다. ruby fooruby foo.rb함께 또는 오두막없이 동일하게 작동합니다. ./foo./foo.rb(등, 올바른 코드를 가정) 모두 오두막없이 실패하고 그것으로 성공 (그들이 실행있어 가정).
bfontaine

10

배치 (6 자)

이것은 파일을 삭제할 권한이 있다고 가정하고 물론 Windows에서 수행 할 수 있습니다 (MS-DOS도 가능).

del %0

10

배쉬 9 8 자

nc -l 1&

포트가 영원히 차단되므로 한 번만 실행됩니다.


1
0특수 포트 (예약되어 있기 때문에) 가 작동하지 않는다고 생각합니다 . 내 컴퓨터에서 이것을 실행하면 여러 번 열 수 있습니다. 또한 포트 < 1024이므로 루트 액세스를 청취해야합니다.
heinrich5991

nc -l 1&0마지막 공간이 필요하지 않기 때문에 문제를 해결하고 1 바이트 더 짧습니다.
kasperd

@kasperd 입력 주셔서 감사합니다 :-)
Falco

@ heinrich5991 ok-9654와 같은 포트를 사용하려면 루트 액세스 권한이없는 11 문자가 필요합니다.
Falco

왜 다운 보트를 설명해야합니까?
팔코

9

NodeJS-33 바이트

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

언어에 익숙하지 않은 사람들에게 이것이 무엇을하는지 설명해 주시겠습니까?
Kyle Kanos

1
@KyleKanos 파일 시스템 모듈 fs과 현재 파일 이름을 가져와 파일 시스템 __filename에서 해당 파일 이름을 제거합니다.
Keen

7
세미콜론은 JavaScript에서 선택 사항이므로 생략 할 수 있습니다.
nalply 2016 년

8

배치, 7 자

저장하기 전에 저장하지 않은 작업을 저장하십시오.

64 비트 시스템 또는 <2GB RAM 메모리를 가진 32 비트 시스템을 가정합니다. 시작하기 전에 .bat 또는 .cmd 파일에 저장해야합니다. cmd.exe에 입력하면 작동하지 않습니다.

^ nul<^

전체 CPU 코어를 사용하고 초당 수백 메가 바이트의 속도로 RAM 메모리를 채 웁니다. 제 시간에 중지하지 않으면 (작업 관리자) 컴퓨터의 모든 RAM 바이트를 소비하고 전체 시스템이 정지하며 컴퓨터를 강제로 종료하고 다시 시작하기 전에는 아무것도 할 수 없습니다 전원 또는 전원 버튼을 누르고 있습니다.

모든 크레딧은 StackOverflow의 txtechhelp로 이동하십시오. 자세한 내용은 https://stackoverflow.com/q/23284131/1955334를 참조 하십시오.


이것이 어떻게 가능할까요? 페이징은 어떻습니까? 공정 우선 순위?
Nicolas Barbulesco

이 스크립트를 실행했는데 아무 일도 일어나지 않았습니다.
Pavel

@Pavel Windows 10에서 수정 된 것 같습니다. Windows 10에서는 재현 할 수 없지만 Windows 8.1에서는 작동합니다.
bilde2910

1
"전체 CPU 코어를 소비하고 초당 수백 메가 바이트의 속도로 RAM 메모리를 채 웁니다. 시간 내에 중지하지 않으면 (작업 관리자) 컴퓨터와 전체 시스템의 모든 RAM 바이트를 소비합니다. "전원이 꺼 지거나 전원 버튼을 눌러 컴퓨터를 강제로 종료했다가 다시 시작하기 전에는 작동이 중단됩니다." 컴퓨터에 대한 공포 이야기처럼 들리지만 ...
noɥʇʎԀʎzɐɹƆ

7

커플이 있습니다. 많은 것들과 달리, 이들은 파괴적이고 독창적이고 정통적이지 않습니다.

세게 때리다

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

이것은 매우 간단합니다. 변수 $REPLY는에 의해 암시 적으로 생성 read되지만 빈 herestring으로 채워집니다. 그런 다음 빈 문자열이 printf현재 스크립트에 삽입됩니다. 다음과 같이 다소 난독 처리 된 것입니다.

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

윈도우 배치

copy con %0 < nul

두 번째는 기본적으로 콘솔 입력을에서 읽은 nul현재 파일로 복사 합니다.


이것은 인기 투표 된 후 게시
Isiah 메도우

1
첫 번째는 루트 권한이 없으면 작동하지 않습니다. 널 장치를 교체하려고하는 이유는 무엇입니까? 루트로 실행하면 실제로 시스템이 이상하게 동작합니다. 당신은 또한 그것을 쓰는 동안 널을 덮어 쓰고 있습니다 :) 왜 다른 곳으로 옮기지 않습니까? mv "$ 0" "$ {0} x"와 같은 것입니까? 트릭을해야합니다.
오리온

파일이 계속 존재합니까?
Isiah Meadows

이제 Bash 예제를 완전히 변경했습니다.
Isiah Meadows

이것들은 어떻게 파괴적이지 않습니까?
ysap

7

싱클레어 베이직

10 POKE 23635,255

인터프리터가 잘못된 데이터를 찾을 수 있도록 BASIC 프로그램의 주소를 메모리에서 (203) 떨어진 곳으로 이동시킵니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.