【问题标题】:How to present editable input to a user with BASH and ZSH?如何使用 BASH 和 ZSH 向用户呈现可编辑的输入?
【发布时间】:2019-10-27 15:47:01
【问题描述】:

我需要在可以在 BASH 和 ZSH 中运行的 shell 脚本中接受用户输入。我习惯于在其他语言中使用readline,但这在 shell 脚本中似乎不是一个可行的选择。

一个示例提示可能是:

Please enter the value> 1234_

如何向用户提供可编辑的输入,该输入具有可编辑(退格)且与两个 shell 兼容的默认值?

【问题讨论】:

  • 对于zsh,你可能想看看ZLE模块的vared builtin。这是一个猜测,i=1234; vared -p 'Please enter the value> ' i
  • 没有任何东西可以在两个 shell 中工作,因为每个 shell 使用不同的行编辑器(bash 为 Readline,zsh 为 ZLE)。
  • @Cyrus 谢谢!你成就了我的一天 :-) 你可能还想包含一个变量(例如,称为“答案”),在其中存储用户输入:read -e -p 'Please enter the value> ' -i '1234' answer 的结果类似于:Please enter the value> 1236。显示编辑后的用户输入,例如:echo "$answer" 1236
  • @BernieReiter:这当然是可能的,但不是绝对必要的。如果未指定变量,read 将使用变量 REPLY。如果指定变量,代码当然更容易理解。
  • @cyrus 我把你的评论变成了下面的答案。 IMO 最初可能应该是一个答案。

标签: bash input zsh readline


【解决方案1】:

用户@cyrus在cmets中提到,但直接作为答案更好:

read -e -p 'Please enter the value> ' -i '1234' myvar
echo $myvar

导致1234的可编辑默认值

Please enter the value> 1234
1234

【讨论】:

  • 然后输出位于变量REPLY中。
【解决方案2】:

如果我没有误会... 在“退格”功能方面,删除最后一个字符并添加一些新的.. 这在两个 shell 中都有效,在脚本中进行了简单的“读取”。

echo -n "Enter value > "
read v
echo $v

如果您还有其他问题,能否请您重新措辞以使您的问题更清楚? 你用什么(示例代码)。 您在编辑方面究竟执行了什么(仅 BS 还是您的意思是行编辑命令 CTRL-A 等) 结果/错误是什么,您想要修复什么。 谢谢。

【讨论】:

  • 我根本不知道 zsh,但是从 Bash 的角度来看:echo -n 是不可移植的; read 不在行首会混淆 readline 的列位置概念。这就是为什么read 有一个-p 选项。
  • 这没有提供初始值,这是问题的重点。
猜你喜欢
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多