linux - 如何在 ZSH 中的“eval”之后使用“read -p”请求 y/n 输入?
问题描述
我想编写一个 ZSH 函数,建议我yadm push
在错误的git push
. 我已经设置alias git="correct git"
了以下功能:
function correct (){
if [ "$1" = "git" ] && [ "$2" = "push" ]; then
eval "command $1 $2" ||
echo "Try yadm?"
select yn in "Yes" "No"; do
case $yn in
Yes ) yadm $2; break;;
No ) break;;
esac
done
fi
}
上面的工作按预期工作,而我没有做同样的事情read -p
:
function correct (){
if [ "$1" = "git" ] && [ "$2" = "push" ]; then
eval "command $1 $2" ||
while true; do
read -p "Try yadm? (y/n)" yn
case $yn in
[Yy]* ) yadm $2; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
fi
}
read -p
声明后如何使用eval
?
解决方案
好的,这与 eval 的使用完全无关。在 ZSH 中,read -p
想要从协进程中读取而不是指示提示。在这里回答。
function correct (){
if [ "$1" = "git" ] && [ "$2" = "push" ]; then
command $1 $2 ||
while true; do
printf "Try yadm? (y/n)"
read yn
case $yn in
[Yy]* ) yadm $2; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
fi
}
两个版本中的第二行应该command $1 $2 ||
避免使用eval
,即使它在 if 语句中应该是理智的。
咨询man zshbuiltins
会有所帮助。
推荐阅读
- amazon-web-services - 未压缩的 Redshift 集群大小
- python - Sphinx-如何自动记录位于多个文件夹中的 .py 文件?
- python - 霍夫圆中标量变量错误的索引无效
- javascript - JavaScript 可以优化这个对象吗?
- r - 在 R 中使用 gsub 根据某些模式删除一些行
- ruby-on-rails - 如何为小数制作正则表达式
- netlogo - 两个列表之间的划分并将结果存储在一个列表中 NetLogo
- android - 当我按下 DONE 时没有任何反应
- javascript - ASP.NET 中的 <%@ Register TagPrefix="widget"... 是否存在于纯 HTML 或 javascript 中?
- node.js - 如何使用 Nodejs 在 post 请求之间传输数据