问题

问题

问题

有什么办法可以让我在其提示符下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 添加德语语言环境。我绝对不知道rmCygwin 下是否进行了本地化,以便找到y与德语相同的j内容。坦率地说,我根本不知道它是否进行了本地化。

相关内容