问题
有什么办法可以让我在其提示符下rm -i
输入除j/ J/ n/之外的任何内容时再次询问吗?N
原因
考虑这个小例子:
echo "Hey, I am a file. Or at least I am IN a file." > myFile
rm -i myFile
这问我rm:删除常规文件“myFile”?。我是德国人,但一直使用英语,所以我有时1在我注意到问题是英文之前立即翻译它——所以我输入j(例如贾,即是的在德国)。
输入j问题,rm
视为答案不,所以它不会删除该文件,但也不会给出有关它的错误消息,所以我甚至没有注意到存在问题。
1当然并非总是如此。
答案1
您可以将其添加到您的.bashrc
:
rm() {
if [ $1 == "-i" ]; then
while [ $ANSWER != 'j' ] && [ $ANSWER != 'J' ] && [ $ANSWER != 'n' ] && [ $ANSWER != 'N' ]; do
read -p "rm: remove regular file '$2'? " ANSWER
if [ $ANSWER == 'j' ] || [ $ANSWER == 'J' ]; then
command rm "$2"
fi
done
export ANSWER=:
else
command rm "$@"
fi
}
它基本上是的别名rm -i
,并且只会接受j, J, n, N
作为答案,否则它会再次提示。
其他rm
命令不会受到影响:)
答案2
问题是
有什么办法可以让我在其提示符下
rm -i
输入除j/ J/ n/之外的任何内容时再次询问吗?N
我是不是回答这个问题。不过我要处理实际问题(比较XY问题)。
尝试强制rm
使用您可能心不在焉地使用的语言。在我的 Debian 中rm
来自 GNU coreutils;LANG=de_DE.UTF-8 rm -i myFile
对待j
或者 y
作为确认,因此无论是用德语还是英语确认,它都可以很好地工作。
根据您想要的范围,使用别名 ( alias rm='LANG=de_DE.UTF-8 rm'
) 或包装函数 ( rm() { LANG=de_DE.UTF-8 command rm "$@"; }
),甚至包装脚本。rm
即使整个常规设置都是英文,也将使用德语。
要使此功能正常工作,您需要de_DE.UTF-8
处于可用状态。在 Debian 中,我通过以下方式使其可用:/etc/locale.gen
在文本编辑器中打开(以 root 身份),取消注释de_DE.UTF-8
,保存文件,最后调用sudo locale-gen
。
您已标记赛格威。如果没有德语语言环境,我绝对不知道如何为 Cygwin 添加德语语言环境。我绝对不知道rm
Cygwin 下是否进行了本地化,以便找到y
与德语相同的j
内容。坦率地说,我根本不知道它是否进行了本地化。