当前位置:  技术问答>linux和unix

在LINUX下如何获得登录用户运行的SHELL命令?

    来源: 互联网  发布时间:2016-04-10

    本文导语:  比如用户运行如下命令: #ls 我就能取到ls 运行 #ls -l > a.txt 我就能取到#ls -l > a.txt 用户使用上方向键运行以前的命令,甚至使用!符号运行HISTORY里的命令,也能正确取得 类似SHELL解析命令的功能,请问如何实现? | ...

比如用户运行如下命令:
#ls
我就能取到ls

运行
#ls -l > a.txt
我就能取到#ls -l > a.txt

用户使用上方向键运行以前的命令,甚至使用!符号运行HISTORY里的命令,也能正确取得
类似SHELL解析命令的功能,请问如何实现?

|
运行 ls    是到你的PATH指定的路径中寻找可以执行的文件(当然是从当前文件开始查找,如果你当前文件里面有ls可执行文件就运行这么命令)

运行
#ls -l > a.txt
我就能取到#ls -l > a.txt 

这个是shell或者系统帮你把运行的命令记录下来而已(具体的文件就在你的用户家目录下的bash_history中)
和内存没有关系的!

如下有一个自己设计的psh () 是关于shell设计的,主要是处理输入的命令,没有编程功能!

/*
 * psh2.c
 * solves the 'one-shot ' porblen of version 0.1
 * uses execvp () , but fork () s first so that the
 * shell waits around to perform another command
 * new Problem : shell catches signals , runvi ,Press ^s
 */

#include                
#include                
#include                
#include                


#define         MAXARGS    20
#define         ARGLEN     100
int     main ()
{

        char            *arglist[MAXARGS + 1] ;
        char            argbuf[ARGLEN ] ;
        int             numargs =0 ;
        char            *makestring (char       *buf) ;
        void            execute (char           *list[] ) ;

        while ( numargs  0 )
                        arglist[numargs] =NULL ;
                        execute ( arglist ) ;
                        numargs =0 ;
                }
        }
        return 0 ;
}

void            execute ( char  *list[] )
{
        int     pid , exitstatus ;

        pid = fork () ;
        switch ( pid ) {
                case -1 : perror ( " fork feld " ) ; exit (1 ) ;
                case 0  :
                        execvp ( list[0] , list ) ;
                        perror ( "execute error " ) ;
                        exit ( 2 ) ;
                default :
                        while ( wait ( & exitstatus ) !=pid ) ;
                        printf ( " child exit whith status %d %d n" , exitstatus>>8 , exitstatus &0x377 ) ;
        }

}

char    *makestring ( char      *buf )
{

        char    *cp ;
        int     len ;

        len = strlen( buf )  ;
        buf [len-1 ] = '' ;   /*here is very improtant , if buf[len ] , it will include the 'n' */

        cp = ( char * ) malloc ( len +1  ) ;
        if ( cp == NULL )
        {
                perror ( " malloc erro " ) ;
                exit ( 2 ) ;
        }

        strcpy ( cp , buf ) ;

        return cp ;
}


|
在一个config文件里,做了记录。

简单的说就是把你用过的命令保存了起来,启动的时候加载到内存,内存中的数据还会跟你使用情况改变更新。退出的时候再保存到config文件里

|


应该就是这样的。
自己要实现的话。可以参考内核的实现。

|
这玩意跟内核没有任何关系


|
帮顶~

    
 
 

您可能感兴趣的文章:

  • Linux常用命令介绍:更改所属用户群组或档案属性
  • linux中有没有什么命令能列出所有linux的内部命令
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • linux在脚本执行命令和直接在命令行执行命令有什么区别
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 有没有在windows下模拟Linux命令系统的软件! 我想学习Linux的基本命令!
  • Linux下chmod命令详细介绍及用法举例
  • linux 的命令操作和 windows的命令提示行有什么不同呢?? 为什么windows一般都不用命令提示行操作呢??
  • linux bash shell命令:grep文本搜索工具简介
  • linux系统安装测试命令oslevel,lsdev命令不识别
  • Linux_centos_redhat下tar命令解压tgz文件方法
  • 在Linux下使用ftp命令,被提示命令没有找到
  • linux下利用(cat,strings,head,sed)命令生成随机字符串
  • linux命令行下使用curl命令查看自己机器的外网ip
  • linux下free命令显示的内存使用情况分析
  • linux中的用户,用什么命令修改密码(要一条命令做到)???
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • linux 中查看过去运行的命令的命令是什么?
  • Linux下curl的下载,安装以及curl命令的详细参数,用法介绍
  • linux下执行命令为什么要在命令前加./
  • linux下不使用sudo命令执行docker的操作步骤
  • linux的命令,怎么能知道这个命令的默认选项是什么?
  • 没有LINUX经验如何获得一份LINUX工作
  • linux下什么语言获得参数是~1
  • 如何获得linux下 命令行长度最长是多少?或者如何知道linux下,一个文件的一行最长是多少?
  • Linux下怎么用程序获得U盘盘符文件
  • 如何获得Linux的CPU使用率
  • 请教:如何在Linux下获得EDID信息
  • 如何获得linux系统中,usb设备的id
  • 急!在Linux下获得硬盘剩余空间的c函数是什么?
  • 在linux中,如何在程序中获得分辨率!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • 弱弱地问,能否让WINDOWS下自动运行的多媒体光盘在LINUX下也自动运行播放(LINUX下可一看到光盘上文件)
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • 程序在windows下用visual运行正常,如何才能在linux下运行??
  • 怎样让linux启动后不运行桌面而是直接运行某个应用程序呢?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • linux编写一个脚本判断程序是否在运行,如果没运行就重启这个软件。
  • 请问如何让Linux 0.11运行?它运行后是怎样的?谢谢!!
  • 新手提问:grep在linux中运行跟在php运行返回结果不一样
  • Linux开关机时想让脚本运行却运行不了?
  • 谁有linux?帮我用在linux运行两个文件好吗?
  • linux环境下,java程序手工运行不乱码,crontab自动运行就乱码
  • vmware怎么优化?在vmware上装linux运行起来是不是特别慢?我在256内存的p4上安装,运行起来很慢!
  • 编程语言 iis7站长之家
  • 请问在高版本linux编译链接的程序如何在低版本Linux上运行
  • linux运行级别
  • 我在linux下安装了linux版的realone,但却没法找到如何运行。
  • 在Linux Shell scripts下变量如何取linux的命令运行值
  • 请问如何在linux下运行windows游戏?
  • 在linux中什么叫运行级别
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3