Ответ 1
rm -- "$0"
Должен сделать трюк. $0 - волшебная переменная для полного пути выполняемого 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
rm -- "$0"
Должен сделать трюк. $0 - волшебная переменная для полного пути выполняемого script.
Это работает для меня:
#!/bin/sh
rm test.sh
Возможно, вы действительно не имели в виду '$' в '$ test.sh'?
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
Зачем вообще удалять script? Как говорили другие, это означает, что вам нужно сохранить копию в другом месте.
Предполагается использовать подход "firstboot". Просто создайте пустой файл, например. /etc/sysconfig, который запускает выполнение этого script, если он присутствует. Затем удалите этот файл в конце script.
Измените script, чтобы он имел необходимые заголовки chkconfig и поместил его в /etc/init.d/, поэтому он запускается при каждой загрузке.
Таким образом, вы можете повторно запустить script позже, просто обновив триггер script.
Надеюсь, что это поможет.