bash는 스크립트를 실행하는 동안 폴더를 삭제합니다

bash는 스크립트를 실행하는 동안 폴더를 삭제합니다

폴더에서 스크립트가 실행 중입니다. 명령이 실패하면 스크립트가 포함된 폴더를 삭제하고 싶습니다. 그게 가능합니까?

편집: 의견을 바탕으로 내가 시도한 것을 생각해 냈습니다.

답변1

누군가가 OP의 제안을 시도할까봐 걱정되어 답변을 드립니다...

중요한 경고: 질문에 표시된 스크립트는 주어진 디렉토리를 삭제합니다 pwd. 이는 스크립트가 있는 디렉토리가 아니지만스크립트를 시작할 때 사용자가 있는 디렉터리.

누군가가 이렇게 하면 (**이것을 시도하지 마세요**) cd ; /path/to/thatscript사용자의 전체 홈 디렉토리("cd"가 홈 디렉토리로 반환되기 때문에)와 그 아래의 모든 항목을 삭제하게 됩니다! ...

(이것은 루트의 homedir이 "/"인 일부 운영 체제에서 특히 나쁩니다...).

대신 스크립트에서 다음을 수행해야 합니다.

mydir="$(cd -P "$(dirname "$0");pwd)"     
      #retrieve the script's absolute path, 
      #even if the script was called via ../relative/path/to/script
echo "the script '$0' is in: ${mydir} "
...
# and then (if you really want this.... but I think it's a bad idea!)
# rm -rf "${mydir:-/tmp/__UNDEFINED__}"  #deletes ${mydir}, if defined
# once you're sure it is correctly reflecting the real script's directory.

답변2

그래 넌 할수있어.

다음과 같은 일이 일어날 것입니다:

[root@server ~]# mkdir new&&cd new
[root@server new]# echo -e "#! /bin/bash\nrm -rf" >remove.sh
[root@server new]# 고양이 제거.sh
#!/bin/bash
rm -rf ~/새로 만들기
[루트@서버새]#ls
삭제.sh
[root@server new]# bash 제거.sh
[루트@서버새로운]#ls

(여기는 비어 있고 모든 파일과 디렉터리가 삭제되지만 디렉터리를 변경하기 전에는 여전히 이 "새" 폴더에 있습니다.)
[루트@서버새로운]# CD..
[root@server ~]# ls 새로운
ls: 새 항목에 액세스할 수 없습니다: 해당 파일이나 디렉터리가 없습니다

관련 정보