폴더에서 스크립트가 실행 중입니다. 명령이 실패하면 스크립트가 포함된 폴더를 삭제하고 싶습니다. 그게 가능합니까?
편집: 의견을 바탕으로 내가 시도한 것을 생각해 냈습니다.
답변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: 새 항목에 액세스할 수 없습니다: 해당 파일이나 디렉터리가 없습니다