bash – 如何在交互式shell脚本中使“echo”ed行可编辑?
发布时间:2020-12-15 21:03:52 所属栏目:安全 来源:网络整理
导读:我有以下问题:在交互式脚本中,当要求输入时,我想显示一个建议并使其可编辑.它与命令提示符中的“向上箭头和编辑最后一个命令”类似,除非没有“向上箭头”.到目前为止,我尝试了几种不同的东西但没有成功 这些是我尝试过的东西: 1)从编辑器获取输入,如下所示
我有以下问题:在交互式脚本中,当要求输入时,我想显示一个建议并使其可编辑.它与命令提示符中的“向上箭头和编辑最后一个命令”类似,除非没有“向上箭头”.到目前为止,我尝试了几种不同的东西但没有成功
这些是我尝试过的东西: 1)从编辑器获取输入,如下所示: echo "$SUGGESTIONc" INPUT=`ed -` # problem with this approach is that 'ed' starts in command mode # by default,and I would need input mode 2)使用read -e echo "$SUGGESTIONc" read -e INPUT # doesn't work as advertised 经过广泛的谷歌搜索,我确信2)应该工作,但事实并非如此.首先,我不能先删除$SUGGESTION而不先输入一些输入;键入一些字符后,退格键会删除整行,而不只是一个字符. 所以我的问题是:如何使“read -e”工作或是否有另一种方法来解决这个问题?非常感激您的帮忙! 解决方法
它确实像宣传的那样工作,但你需要一个额外的参数来做你想要的:
read -e -i "$SUGGESTION" INPUT 不幸的是,这只适用于Bash 4. 如果你有一个C编译器和readline可用,这里有一个你可以使用的快速入侵.将以下内容保存到myread.c(或其他)并编译它(您需要与readline链接).对于GCC,那将是:gcc -o myread myread.c -lreadline. #include <stdio.h> #include <readline/readline.h> int main(int argc,char **argv) { if (argc != 2) return 1; // stuff the input buffer with the default value char *def = argv[1]; while (*def) { rl_stuff_char(*def); def++; } // let the user edit char *input = readline(0); if (!input) return 1; // write out the result to standard error fprintf(stderr,"%s",input); return 0; } 你可以像这样使用它: myread "$SUGGESTION" 2> some_temp_file if [ $? -eq 0 ] ; then # some_temp_file contains the edited value fi 有很大的改进空间,但我想这是一个开始. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |