![Unix 单行编辑器/提示符?](https://linux22.com/image/506684/Unix%20%E5%8D%95%E8%A1%8C%E7%BC%96%E8%BE%91%E5%99%A8%2F%E6%8F%90%E7%A4%BA%E7%AC%A6%EF%BC%9F.png)
我有一个 bash 脚本,如果当我提示用户时,而不是仅仅要求输入,如果它提供了一行用户可以编辑的内容(但完整的文本编辑器就太过分了,它只有一行),那就更好了
什么工具可以提供此功能?
dialog
的输入框几乎是正确的,但我宁愿它不绘制整个屏幕。
答案1
如果您为内置的“read”命令指定“-e”标志,它就可以使用 Readline 库进行编辑:
read -e foo
答案2
如果你不介意使用 perl,你可以使用 Term::Readline
C 中也有 readline() 实现;其他语言中可能也有。我不知道 bash 的 readline 接口
perldoc 术语::Readline
复制如下,注意示例脚本
> Term::ReadLine(3) User Contributed
> Perl Documentation
> Term::ReadLine(3)
>
>
>
> NAME
> Term::ReadLine - Perl interface to various "readline" packages. If no
> real package is found, substitutes stubs instead of basic
> functions.
>
> SYNOPSIS
> use Term::ReadLine;
> my $term = new Term::ReadLine 'Simple Perl calc';
> my $prompt = "Enter your arithmetic expression: ";
> my $OUT = $term->OUT || \*STDOUT;
> while ( defined ($_ = $term->readline($prompt)) ) {
> my $res = eval($_);
> warn $@ if $@;
> print $OUT $res, "\n" unless $@;
> $term->addhistory($_) if /\S/;
> }
>
> DESCRIPTION ...
答案3
在 zsh 中,你有vared
:
% foo=wibble
% vared foo
wibble
此时光标位于 wibble 的末尾,您可以根据需要进行编辑,按下回车键后,您就定义了新的值foo
。
答案4
在 bash 中,
输入=“编辑此”
echo -en "$input\r";阅读回复;
echo $reply${input:${#reply}}
注意 echo 中的 \r(回车符)。最后一行中的括号巫术打印回复以及您未删除的输入的剩余部分。
这并不理想——你基本上覆盖了输入变量,但并没有真正编辑它。
2c 美元,*-长矛