芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 4154|回复: 0

小技巧:在linux下简单模拟“命令菜单”

[复制链接]

该用户从未签到

58

主题

70

帖子

749

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
749
发表于 2021-10-8 13:01:53 | 显示全部楼层 |阅读模式

众所周知,在linux系统下执行过的命令,都会被系统自动记录,使用上下键就可以快捷地切换历史命令,然后按回车就可以执行。

使用上下键切换命令,然后按下回车即可执行该命令,这种特性像不像在操作一个菜单?因此我们是否可以将其当做一个菜单功能来用呢?

答案是可以的!这种方式简单便捷,可以用于批量测试开发板某些功能的场景。

这里使用ZYNQ开发板举例。

使用vi命令创建一个名为Command_Menu的文件,在里面写入你想要执行的菜单命令,例如


date
./wifi.sh
./lcd.sh
./tp.sh

这里写入了4条命令,第一条为时间显示命令date,后面三条命令分别执行了三个脚本,wifi测试脚本、lcd测试脚本、触摸测试脚本。这四个命令就是我们创建的菜单里的4个项目。

创建完成后,在系统启动文件/etc/init.d/rcS 文件中添加以下这段话,在开机时将我们写的文件内容拷贝到/home/root/.bash_history中



cp /home/root/Command_Menu /home/root/.bash_history

这里注意,上面的那句话必须添加在exec /etc/init.d/rc S这句话前面,否则无效

这里添加完成后,使用reboot命令重新启动开发板后,即可直接使用上下键切换命令了,就像使用一个“菜单”一样。

既然不需要输入命令,正好我使用的这块ZYNQ开发板上有两个按键,其实切换历史命令只需要使用上键即可,使用命令则是回车键,所以两个按键就能实现“菜单”功能。

既然如此,我们在设备树中添加这两个按键,并分别赋予它们上键和回车键的功能,加上lcd屏幕后,便可脱离PC端,只需要自带的两个按键即可执行“菜单”里的所有命令。

keys {
        compatible = "gpio-keys";
        autorepeat;
        key0 {
                label = "ps_key";
                linux,code = <KEY_UP>;
                gpios = <&gpio0 47 GPIO_ACTIVE_LOW>;
                debounce-interval = <15>;
        };
        key1 {
                label = "pl_key";
                linux,code = <KEY_ENTER>;
                gpios = <&gpio0 55 GPIO_ACTIVE_LOW>;
                debounce-interval = <15>;
        };
};

但是,这个“菜单”设计有一个缺陷,由于每次执行命令后,linux都会将其自动保存到到历史记录中,因此就会导致“菜单”越来越长,除非重新开机“重置菜单”。这个问题使用history命令就可以解决,使用history -r命令可以将.bash_history里的记录读入当前历史记录,也就是“重置菜单”。因此只需要在自己运行的脚本末尾添加一句history -r,即可弥补这个缺陷。

但是,history在脚本中默认是无法使用的,我们对比一下在shell下“直接使用set -o命令”与“使用含set -o命令的脚本”二者的区别,左边是在shell下使用的结果,右边是在脚本中使用的结果

直接使用set -o命令

直接使用set -o命令

使用含set -o命令的脚本

使用含set -o命令的脚本

可以发现,二者是不一致的,在脚本中使用时,history命令默认没有被开启,因此我们需要先把它开启,然后才能使用

因此在脚本中的末尾添加history -r语句之前,需要先添加set -o history语句开启history命令功能。

然而,以上只是我一厢情愿的想法,我测试之后发现并非如此,由于在使用脚本时,开启的是另一个shell,所以这里操纵的history其实是另一个shell的历史,脚本运行结束后,会切换回原来的shell,因此对history的任何操作都无效,所以“命令菜单”越用越长的缺陷仍然存在,只能将history -r也加入到“命令菜单”里,然后手动“重置菜单”。





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2024-4-19 16:11 , Processed in 0.111611 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表