首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将交互式命令绑定到密钥序列

将交互式命令绑定到密钥序列
EN

Stack Overflow用户
提问于 2020-12-27 12:54:03
回答 1查看 151关注 0票数 2

在编译和执行一个涉及scanf()的C程序时,我遇到了一个有趣的问题。我使用Ubuntu20.04LTS与Bash和GCC v10.2.0。

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
    int decimalInteger;

    printf("Enter a decimal integer value: ");

    scanf("%d", &decimalInteger);

    printf("It can also be written in octal and hexadecimal notations as %o and %x, respectively.\nWith C prefixes, they are %#o (for octal) and %#x/%#X (for hexadecimal).\n", decimalInteger, decimalInteger, decimalInteger, decimalInteger, decimalInteger);

    return 0;
}

当我用gcc-10 *.c -std=c11 && ./a.out编译和运行它时,它运行得非常好。输入后按enter键后,光标移动到下一行。

使用完整命令输出:

但是,当我将bind -x '"\C-h":gcc-10 *.c -std=c11 && ./a.out'添加到.bashrc,然后使用Ctrl+H编译和执行程序时,输出如下所示:

控制台不会显示输入,光标也不会移动到下一行。

为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-28 06:02:40

这是正常的,readline在读取输入时更改终端设置。否则行编辑是不可能的。

您需要将原始终端设置保存到变量中,并在运行程序之前恢复它们。

代码语言:javascript
复制
stty_orig=$(stty -g)

my_func() {
  local stty_bkup=$(stty -g)
  stty "$stty_orig"
  # compile and run here
  stty "$stty_bkup"
}

bind -x '"\C-h": my_func'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65465973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档