Unix 单行编辑器/提示符?

Unix 单行编辑器/提示符?

我有一个 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 美元,*-长矛

相关内容