
폴더에서 스크립트가 실행 중입니다. 명령이 실패하면 스크립트가 포함된 폴더를 삭제하고 싶습니다. 그게 가능합니까?
편집: 댓글을 바탕으로 제가 시도한 것을 꺼냈습니다.
답변1
누군가가 OP의 제안을 시도할까봐 걱정되어 대답합니다...
큰 경고 단어: 질문에 표시된 스크립트는 에서 제공한 디렉토리를 삭제합니다 pwd
. 이 디렉토리는 스크립트가 있는 디렉토리가 아니지만스크립트를 시작할 때 USER가 있는 디렉토리.
만약 그렇게 한다면: (**이것을 시도하지 마세요 **) cd ; /path/to/thatscript
그들은 사용자의 전체 홈디렉토리("cd"가 다시 들어왔기 때문에)와 그 아래의 모든 것을 삭제하게 될 것입니다! ...
(이것은 루트의 homedir이 "/"인 일부 OS에서 특히 나쁩니다 ...).
대신 스크립트에서 다음을 수행해야 합니다.
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: 새 항목에 액세스할 수 없습니다: 해당 파일이나 디렉터리가 없습니다