检查 "rm -i" 上的用户输入?
Check user input on "rm -i"?
有没有办法检查用户对 rm -i
执行的响应?
我想 echo
取决于用户是否响应 y
或 n
。
命令 returns 成功,不管用户的响应如何,所以这次尝试没有成功:
$ rm -i testfile.txt && echo "The file was deleted."
remove testfile.txt? n
The file was deleted.
我的推理是 echo
部分只有在 rm
部分成功时才会执行,但显然 n
响应也算作成功执行。
我还希望能够根据答案改变消息。这段代码可以做到,但它不是很漂亮。
file=testfile.txt
touch $file
read -p "Are you sure (y/n)? " answer
if [[ $answer =~ ^[yY](es|ES)?$ ]]; then
rm $file
echo "Deleted file."
else
echo "Did nothing."
fi
肯定有办法获取 rm -i
的输入。
怎么样?
您可以检查文件是否真的被删除了。例如
rm -i testfile.txt && [[ ! -e testfile.txt ]] && echo "The file was deleted."
如果rm
成功,则测试,如果文件不存在[[ ! -e file ]]
,才显示信息。它涵盖了这种情况,当您尝试删除不存在的文件时,此后 rm
将 return 退出代码不同于 0.
如果您想在文件被故意删除或未删除时显示消息,以及有关错误的额外信息,那么您可以像这样扩展之前的代码:
rm -i testfile.txt && {
[[ ! -e testfile.txt ]] && echo "The file was deleted." || echo "Ignored"
} || echo "Error"
你尝试的大部分问题是你试图容纳太多可能的输入,或者自相矛盾地限制输入具体"yes"或"no" 同时排除 "yeah"、"yup"、"nope" 等。只需 y
或 n
即可(事实上,您需要做的唯一区分介于 y
和非 y
).
之间
read -p "Are you sure (y/n)? " answer
if [[ $answer = [yY]* ]]; then
rm -- "$file"
echo "Deleted file."
else
echo "Did nothing."
fi
如果你愿意,可以在if
语句之前使用shopt -s nocasematch
这样你就可以简单地写if [[ $answer = y* ]]; then
来忽略用户实际输入的大小写。
您最初的问题需要 rm
本身提供的一些钩子,但它不会。
有没有办法检查用户对 rm -i
执行的响应?
我想 echo
取决于用户是否响应 y
或 n
。
命令 returns 成功,不管用户的响应如何,所以这次尝试没有成功:
$ rm -i testfile.txt && echo "The file was deleted."
remove testfile.txt? n
The file was deleted.
我的推理是 echo
部分只有在 rm
部分成功时才会执行,但显然 n
响应也算作成功执行。
我还希望能够根据答案改变消息。这段代码可以做到,但它不是很漂亮。
file=testfile.txt
touch $file
read -p "Are you sure (y/n)? " answer
if [[ $answer =~ ^[yY](es|ES)?$ ]]; then
rm $file
echo "Deleted file."
else
echo "Did nothing."
fi
肯定有办法获取 rm -i
的输入。
怎么样?
您可以检查文件是否真的被删除了。例如
rm -i testfile.txt && [[ ! -e testfile.txt ]] && echo "The file was deleted."
如果rm
成功,则测试,如果文件不存在[[ ! -e file ]]
,才显示信息。它涵盖了这种情况,当您尝试删除不存在的文件时,此后 rm
将 return 退出代码不同于 0.
如果您想在文件被故意删除或未删除时显示消息,以及有关错误的额外信息,那么您可以像这样扩展之前的代码:
rm -i testfile.txt && {
[[ ! -e testfile.txt ]] && echo "The file was deleted." || echo "Ignored"
} || echo "Error"
你尝试的大部分问题是你试图容纳太多可能的输入,或者自相矛盾地限制输入具体"yes"或"no" 同时排除 "yeah"、"yup"、"nope" 等。只需 y
或 n
即可(事实上,您需要做的唯一区分介于 y
和非 y
).
read -p "Are you sure (y/n)? " answer
if [[ $answer = [yY]* ]]; then
rm -- "$file"
echo "Deleted file."
else
echo "Did nothing."
fi
如果你愿意,可以在if
语句之前使用shopt -s nocasematch
这样你就可以简单地写if [[ $answer = y* ]]; then
来忽略用户实际输入的大小写。
您最初的问题需要 rm
本身提供的一些钩子,但它不会。