自我删除shell脚本

时间:2012-01-24 01:53:11

标签: bash shell

我四处寻找这个问题的答案,却找不到答案。

我编写了一个简单的脚本来执行初始服务器设置,我希望它在完成时从根目录中删除/取消链接。我已经尝试了一些我用Google搜索的解决方案(例如/ bin / rm $ test.sh),但脚本似乎总是保持不变。这可能吗?以下是我目前的脚本。

#! /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  

5 个答案:

答案 0 :(得分:67)

rm -- "$0"

应该做的伎俩。 $ 0是执行脚本完整路径的魔术变量。

答案 1 :(得分:21)

这对我有用:

#!/bin/sh

rm test.sh

也许你真的不想在'$ test.sh'中加上'$'?

答案 2 :(得分:4)

脚本可以在退出时通过shred command作为安全删除)自行删除。

#!/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

答案 3 :(得分:2)

最简单的一个:

#!/path/to/rm

用法:./path/to/the/script/above

注意:/path/to/rm 不能有空白字符。

答案 4 :(得分:-3)

为什么要删除脚本?正如其他人所说,这意味着你必须在其他地方保留副本。

建议使用类似“firstboot”的方法。只需在例如创建一个空文件即可/ etc / sysconfig触发执行此脚本(如果存在)。然后在脚本末尾删除该文件。

修改脚本,使其具有必要的chkconfig标头并将其放在/etc/init.d/中,以便在每次启动时运行。

这样,您可以稍后通过重新创建触发器脚本重新运行脚本。

希望这有帮助。