Self-deleting shell script

Я искал ответ на этот вопрос, но не смог найти его.

Я написал простой script, который выполняет начальные настройки сервера, и я хотел бы, чтобы он удалял/отсоединял себя из корневого каталога при завершении. Я пробовал ряд решений, которые я искал в googled (например,/bin/rm $test.sh), но script всегда, кажется, остается на месте. Это возможно? Ниже приведен мой script.

#! /bin/bash
cd /root/
wget -r -nH -np --cut-dirs=1 http://myhost.com/install/scripts/
rm -f index.html* *.gif */index.html* */*.gif robots.txt
ls -al /root/

if [ -d /usr/local/psa ]
    then
        echo plesk > /root/bin/INST_SERVER_TYPE.txt
    chmod 775 /root/bin/*
    /root/bin/setting_server_ve.sh
    rm -rf /root/etc | rm -rf /root/bin | rm -rf /root/log | rm -rf /root/old
    sed -i "75s/false/true/" /etc/permissions/jail.conf
        exit 1;
elif [ -d /var/webmin ]
    then
    echo webmin > /root/bin/INST_SERVER_TYPE.txt
    chmod 775 /root/bin/*
    /root/bin/setting_server_ve.sh
    rm -rf /root/etc | rm -rf /root/bin | rm -rf /root/log | rm -rf /root/old
    sed -i "67s/false/true/" /etc/permissions/jail.conf
        break
    exit 1;
else
    echo no-gui > /root/bin/INST_SERVER_TYPE.txt
    chmod 775 /root/bin/*
    /root/bin/setting_server_ve.sh
    rm -rf /root/etc | rm -rf /root/bin | rm -rf /root/log | rm -rf /root/old
    sed -i "67s/false/true/" /etc/permissions/jail.conf
        break
    exit 1;
fi  

Ответ 1

rm -- "$0"

Должен сделать трюк. $0 - волшебная переменная для полного пути выполняемого script.

Ответ 2

Это работает для меня:

#!/bin/sh

rm test.sh

Возможно, вы действительно не имели в виду '$' в '$ test.sh'?

Ответ 3

script может удалить себя через команду shred (как безопасное удаление), когда она выйдет.

#!/bin/bash

currentscript="$0"

# Function that is called when the script exits:
function finish {
    echo "Securely shredding ${currentscript}"; shred -u ${currentscript};
}

# Do your bashing here...

# When your script is finished, exit with a call to the function, "finish":
trap finish EXIT

Ответ 4

Зачем вообще удалять script? Как говорили другие, это означает, что вам нужно сохранить копию в другом месте.

Предполагается использовать подход "firstboot". Просто создайте пустой файл, например. /etc/sysconfig, который запускает выполнение этого script, если он присутствует. Затем удалите этот файл в конце script.

Измените script, чтобы он имел необходимые заголовки chkconfig и поместил его в /etc/init.d/, поэтому он запускается при каждой загрузке.

Таким образом, вы можете повторно запустить script позже, просто обновив триггер script.

Надеюсь, что это поможет.