Заметки · 11.05.2022

Сделать дело и удалиться

Сначала поговорим про batch.

За самоудаление в bat-файлах отвечает команда del %0. Не сложно догадаться, что в конструкции %0 хранится путь до текущего bat-скрипта, а del удаляет файл по этому пути. Разумеется, всё сработает только при соблюдении всех нужных прав доступа к файлу или при запуске скрипта с правами администратора.

В коде это выглядит примерно так:

@echo off

@rem КОДИРОВКА ВЫВОДА
chcp 1251

@rem ЗАГОЛОВОК СКРИПТА
title Заголовок скрипта

@rem КАКИЕ-ЛИБО ДЕЙСТВИЯ СКРИПТА

@rem КОМАНДА УДАЛЕНИЯ БАТНИКА
del %0

@rem ВЫХОД ИЗ СКРИПТА
exit

Теперь bash. Здесь всё аналогично, только путь к скрипту скрывается в конструкции $0. Плюс: я ещё добавил команду cp для резервного копирования файла скрипта в ту же самую папку.

#!/bin/bash

# Узнаём директорию скрипта
dir="$(dirname -- "$0")"

# Переходим в директорию скрипта
cd $dir

# Создаём копию скрипта
cp $0 test.sh.bak

# Удаляем файл скрипта
rm $0

Кстати, переименовать резервный файл test.sh.bak обратно в test.sh можно командой:

mv test.sh.bak test.sh

Если что-то идёт не так — попробуйте выполнить скрипт с sudo.