我四处寻找这个问题的答案,但没有找到。
我写了一个简单的脚本来初始化服务器设置,我想让它在完成时从根目录中删除/取消链接。我试过很多我在谷歌上搜索的解决方案(例如/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
7条答案
按热度按时间balp4ylt1#
应该可以。$0是一个魔术变量,表示已执行脚本的完整路径。
mwkjh3gx2#
这对我很有效:
也许您并不是真的想要在'$test.sh'中有'$'?
3qpi33ja3#
脚本退出时可以通过shred command(* 作为安全删除 *)删除自身。
mrphzbgm4#
最简单的一个:
用法:
./path/to/the/script/above
注意:
/path/to/rm
不能有空白字符。8iwquhpp5#
我编写了一个小脚本,它基于
用户742030答案https://stackoverflow.com/a/34303677/10772577
请在此处查看存储库:https://github.com/reedHam/self-shred
9rygscc16#
在某些情况下,
$0
可能不包含脚本的名称/路径。请检查以下内容:https://stackoverflow.com/a/35006505/5113030(* 在$0和BASH_SOURCE之间选择 *...)在这些情况下,以下脚本应按预期工作:
source script.sh
--脚本来源;./script.sh
-交互执行;/bin/bash -- script.sh
-作为参数传递给shell程序。请检查以下有关shell脚本源代码阅读和执行的信息,因为在运行过程中删除脚本可能会影响行为:https://unix.stackexchange.com/a/121025/133353(* Linux如何处理shell脚本?...)
相关:https://stackoverflow.com/a/246128/5113030( 如何从 *...获取Bash脚本的源目录)
eufgjt7s7#
为什么要删除脚本呢?正如其他人所提到的,这意味着你必须在其他地方保留一份副本。
建议使用类似“firstboot”的方法。只需在/etc/sysconfig中创建一个空文件,如果存在该文件,则触发此脚本的执行。然后在脚本结束时删除该文件。
修改脚本,使其具有必要的chkconfig头文件,并将其放在/etc/init.d/中,以便在每次 Boot 时运行。
这样,以后只需重新创建触发器脚本即可重新运行该脚本。
希望这对你有帮助。