作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须制作一个基本的 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/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!