
У меня есть скрипт, работающий в папке. Если команда не выполняется, я хочу удалить папку, содержащую скрипт. Это возможно?
Редактировать: основываясь на комментариях, я убрал то, что попробовал.
решение1
Я даю ответ, так как опасаюсь, что кто-нибудь попробует воспользоваться предложением автора...
БОЛЬШОЕ предупреждение: скрипт, показанный в вопросе, удаляет каталог, указанный pwd
, который НЕ является каталогом, в котором находится скрипт, нокаталог, в котором находится ПОЛЬЗОВАТЕЛЬ при запуске скрипта.
Если кто-то это сделает: (**НЕ ПЫТАЙТЕСЬ ЭТОГО **) cd ; /path/to/thatscript
они удалят ВЕСЬ ДОМАШНИЙ КАТАЛОГ ПОЛЬЗОВАТЕЛЯ (поскольку "cd" вернется в него) И ВСЕ, ЧТО ПОД НИМ! ...
(Это особенно плохо в некоторых ОС, где домашним каталогом root является "/" ... ).
Вместо этого в вашем сценарии вам следует:
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]# cat remove.sh #!/bin/баш rm -rf ~/новый [root@server новый]# ls удалить.sh [root@server новый]# bash remove.sh [корень@серверновый]# ls (здесь пусто, все файлы и каталоги удалены, но мы все еще находимся внутри этой «новой» папки, прежде чем мы изменим наш каталог) [корень@серверновый]# CD .. [root@server ~]# ls новый ls: невозможно получить доступ к новому: Нет такого файла или каталога