해당 스크립트 내에서 스크립트 파일을 제거하는 것이 안전합니까?


9

스크립트가 있다고 상상해보십시오 foo. 사용자가 로그인 할 때 한 번만 실행해야하며 성공적인 실행 후에는 필요하지 않습니다.

내 질문 : 스크립트 내에서 스크립트 파일을 제거하는 것이 안전합니까?

예 :

#!/bin/bash

# do something
...

# if successful
rm /path/to/foo
exit 0

2
완전히 무관하지는 않지만 #!/bin/bash -e아무 문제가없는 경우에만 스크립트 파일을 제거 할 수 있습니다 .
sr_

3
예, 안전합니다. 왜 알고 싶다면, stackoverflow.com/questions/2028874/…
jofel

2
@ jofel 잘 들립니다.이 답변을 제안합니다. :-)
htorque

의심스러운 경우 마지막 두 줄을로 바꿀 수 있습니다 exec rm /path/to/foo.
kasperd

답변:


5

파일 핸들러는 해당 파일의 이동에 의해 영향을받지 않기 때문에 실행 중에 쉘 파일을 제거하는 것이 안전합니다.

자세한 내용은 여기를 참조 하십시오 .


2
시스템에 따라 작동하지 않을 수 있습니다 (예 : rm <it-self>HP-Ux에서는 성공하지 못할 것입니다)
Ouki

1
@ 오우 키 왜? POSIX를 위반하지 않습니까?
maxschlepzig

3
@maxschlepzig POSIX를 사용하면 현재 실행중인 실행 파일에 대한 마지막 링크를 삭제할 unlink수 없습니다 ETXTBUSY. 실패 할 수 있습니다 . 이상하게도“순수한 절차”와“공유 텍스트”는 사양에 정의되어 있지 않습니다. AFAIK는 실행 프로그램의 구성 요소를 의미합니다 (실행 파일 자체 또는 사용하는 라이브러리). HP-UX 이외의 모든 주요 유니스를 사용하면 실행 파일의 이름을 바꾸고 연결을 해제 할 수 있습니다.
Gilles 'SO- 악마 그만해'

2
@Ouki 단순히로 스크립트를 끝내면 쉽게 돌아갈 수 있습니다 exec rm /path/to/foo.
kasperd

0

나는 항상 이것에 대해 긴장했다.

(sleep 5; rm /path/to/shell/script) &
exit 0

또는 임시 스크립트에 연결할 수 있습니다.

echo >/tmp/rmme rm /path/to/shell/script
. /tmp/rmme

1
제안 된 두 가지 접근 방식에는 스크립트가 삭제 될 때까지 스크립트 실행이 완료되지 않은 쉘 프로세스가 여전히 있습니다.
kasperd

당신이하고 싶은 것은exec rm /path/to/shell/script
osvein April
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.