用realine库完善你的my_shell

本文介绍如何在Linux环境下利用Readline库实现更友好的Shell交互体验,包括方向键操作和历史记录等功能,并提供安装步骤及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux下的标准IO输入很不友善,至少它都不按左右方向键来移动光标,着很多时候会给你很大的困扰,而我在完善自己的shell的时候就被这块难倒了,到底怎么解决方向键的问题呢,我百度了很久,找到了这个好东西,readline库,他可以实现左右方向键移动光标,上下方向键查看历史输入,tab键补全的功能,下面我就来教大家如何使用这个库.
首先,安装它:

sudo apt-get install libreadline6-dev
sudo apt-get install lib64readline6

我的ubuntu用这两条命令安装的,centos系就是把apt-get换成yum,后面的包名不确定,但肯定时readline开头,多用tab键,耐心查找.
装好之后你要确定有/usr/include/readline这个目录.
然后用ldconfig -p | grep readline命令来确定你的你的.so文件位置,找/lib64下的.

┌─╼[~] 
└╼  ldconfig -p | grep readline 
    libreadline.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libreadline.so.6
    libreadline.so.6 (libc6,x86-64) => /lib64/libreadline.so.6
    libreadline.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libreadline.so
    libguilereadline-v-18.so.18 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so.18
    libguilereadline-v-18.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

char *readline (const char *prompt);

这是它的声明,需要include两个.h文件,prompt参数是你要输出的提示信息,它返回的时char* 型的.
然后给大家个简单的示例吧.

#include<stdio.h>
#include<readline/readline.h>
#include<readline/history.h>

int main()
{
    char *line;
    while(1) {
        line = readline(">>");
        puts(line);
        if(*line) {
            add_history(line);
        }
        free(line);
    }
    return 0;
}

add_history()函数是用来保存历史记录的!
然后,由于它的编译挺复杂,我么帮直接写makefile吧

cc = gcc
OBJ = ksh
all:
$(cc) -c ./1.3.c
$(cc) -o $(OBJ) ./1.3.o /lib64/libreadline.so.6 -I -lreadlin -lncurses -g
rm *.o
clean:
rm *.o

至此,你的shell已经相当帅气了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值