相关的Issue

#I4OXAK:shell相关代码master分支同步到3.0LTS

原因(目的、解决的问题等)

  • shell内建ping命令Usage信息打印后,shell提示符显示在同一行内,建议优化
  • mksh执行help,和预期效果不符。当前mksh下键入"help"预期展示shell支持的内建命令和toybox支持的命令,实际展示的是shell支持的内建命令和"toybox help"的usage
  • 不支持exit退出交互式shell
  • 交互式shell退出后,无法再次进入交互式shell
  • 交互式shell对于Ctrl+C等特殊控制字符未做处理

描述(做了什么,变更了什么)

  • shell内建ping命令Usage信息打印最后一行后换行
OHOS:/$ shell ping
Ping: require dest ipaddr at least
Usage:
  ping
  ping [-n cnt] [-w interval] [-l data_len] destination
  ping [-t] [-w interval] destination
  ping -k
  -t means ping forever, user can use -k to stop the forever ping
OHOS:/$ 
  • 更新help的alias,shell的help内核命令列表按照80列的默认值优化打印换行,并添加使用说明
OHOS:/$ help
*******************shell commands:*************************

cat          cd           chgrp        chmod        chown        cp           
cpup         date         dhclient     format       free         help         
ifconfig     kill         ls           mkdir        mount        netstat      
ping         pmm          pwd          reset        rm           rmdir        
shm          sync         systeminfo   task         trace_dump   trace_mask   
trace_reset  trace_start  trace_stop   umount       uname        

After shell prompt "OHOS # ":
Use `<cmd> [args ...]` to run built-in shell commands listed above.
Use `exec <cmd> [args ...]` or `./<cmd> [args ...]` to run external commands.

*******************toybox commands:************************

chgrp chmod chown cp date du free help ifconfig kill ls mkdir mount
mv ping ps reboot rm rmdir top touch umount uname 

Use `toybox help [command]` to show usage information for a specific command.

Use `shell` to enter interactive legacy shell.
Use `alias` to display command aliases.
OHOS:/$ 
  • shell新增对exit的支持
OHOS:/$ shell
OHOS # exit 7
OHOS:/$ echo $?
7
OHOS:/$ shell 
OHOS # exit
OHOS:/$ echo $?
0
OHOS:/$ shell
OHOS # exit 7 8
exit: too many arguments
OHOS # exit ?  
exit: bad number: ?
OHOS # exit -1
OHOS:/$ echo $?
255
OHOS:/$ 
  • 驱动层注册shellEntry的逻辑添加并行保护,且支持更新shellEntryId,解决shell不能多次进入的问题
  • 特殊处理Ctrl+C,打印"^C";Enter的换行在ShellCmdProcess中打印,避免前台程序执行时,多次按下回车或Ctrl+C,提示符"OHOS # "在一行内打印多次;解析普通字符时,屏蔽不可见字符
OHOS # 
OHOS # ^C
OHOS # (键入Ctrl+A,Ctrl+S,发送2个不可见字符,被忽略;回车后另起一行,未解析)
OHOS # 
OHOS # ^C
OHOS # 
OHOS # exec /bin/toybox ping 127.0.0.1
Ping 127.0.0.1 (127.0.0.1): 56(84) bytes.
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=5 ms
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=6 ms(键入Ctrl+C)
OHOS # ^C
OHOS # exec /bin/toybox ping 127.0.0.1
Ping 127.0.0.1 (127.0.0.1): 56(84) bytes.
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=2 ms
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=2 ms(键入Ctrl+C,Enter键,下方多出2个新行)
OHOS # ^C
OHOS # 
OHOS # 
OHOS # exec /bin/toybox ping 127.0.0.1
Ping 127.0.0.1 (127.0.0.1): 56(84) bytes.
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=0 ms
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=1 ms
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=2 ms(键入Enter键,下方多出1个新行)
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=5 ms
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=2 ms
84 bytes from 127.0.0.1: icmp_seq=0 ttl=0 time=5 ms

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 6 received, 1431655665% packet loss
round-trip min/avg/max = 0/0/2 ms
OHOS # 
OHOS #