gpt4 book ai didi

linux - 当用户想要删除 shell 中的特定文件时给出警告提示

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:43 24 4
gpt4 key购买 nike

我必须制作一个基本的 bash 脚本来关注特定的文件,如果我决定删除这个文件,应该会出现一个警告以确认删除。该脚本应该接受一个参数(删除时要检查的文件)我怎样才能做到这一点?我不明白如何检查用户是否真的在脚本运行时尝试删除文件。

任何提示将不胜感激

最佳答案

这是一个非常糟糕的主意。这种机制很容易被有意或无意地规避(运行 >file 而不是 <file 将删除其内容,就像 rm file 一样-- 而且,因为 rm 将保留其他硬链接(hard link),但 >file 将清除与 inode 关联的数据,无论可能有多少链接)。如果这样做会妨碍您保留良好的备份、部署自动快照或利用适当的文件权限,那么弊大于利。

请注意,所讨论的白名单是特定于 shell 的——如果您将一个文件添加到一个 shell 实例的白名单中,则它不一定包含在另一个 shell 实例中。另请注意,该实现是概念验证;它不会捕获标记为保留的文件的父目录的递归删除。

# Put this in your ~/.bashrc

declare -A whitelisted_files

# If our default readlink isn't the GNU one, but we have GNU readlink installed
# as "greadlink", use it.
if command -v greadlink >/dev/null 2>&1; then
readlink() { greadlink "$@"; }
fi

whitelist_file() {
local arg
for arg; do
whitelisted_files["$(readlink -m -- "$arg")"]=1
done
}

rm() {
local arg sigil_seen=0 confirm
for arg; do
if (( sigil_seen == 0 )); then
[[ $arg = -- ]] && { sigil_seen=1; continue; }
[[ $arg = -* ]] && continue
fi
if [[ ${whitelisted_files["$(readlink -m -- "$arg")"]} ]]; then
read -p "File $arg is whitelisted; really remove?" confirm
[[ $confirm = [Yy]* ]] || return 1
fi
done
command rm "$@"
}

此后:

touch preserve_me
whitelist_file preserve_me
rm preserve_me

...将提供提示:

File preserve_me is whitelisted; really remove?

关于linux - 当用户想要删除 shell 中的特定文件时给出警告提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com