shell-like program(shell程序的基本实施部分)

直接上代码:

#include "apue.h"
#include <sys/wait.h>

int main(void)
{
    char    buf[MAXLINE]; /* form apue.h  4096 */
    pid_t   pid;
    int     status;

    printf("%% "); /* print promt (printf requires %% to print %) */
    while (fgets(buf, MAXLINE, stdin) != NULL) {
        if (buf[strlen(buf) - 1] == '\n') {
            buf[strlen(buf) - 1] = 0; /* replace newline while null */
        }

        if ((pid = fork()) < 0) {
            err_sys("fork error");
        } else if (pid == 0) {
            execlp(buf, buf, (char *)0);
            err_ret("couldn't execute: %s", buf);
            exit(127);
        }

        /* parent */
        if ((pid = waitpid(pid, &status, 0)) < 0) {
            err_sys("waitpid error");
        }
        printf("%% ");
    }

    exit(0);
}

很多时候不喜欢csdn这种代码显示,再贴上vim的

测试:

这个小程序的功能限制就是不能给命令传入参数,比如我们不能指定目录名给list,我们只能在当前工作目录中运行。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 06:00:00

shell-like program(shell程序的基本实施部分)的相关文章

Shell编程之三 —— shell script 脚本(未完待续)

1.脚本的语法构成: shell script 是利用 shell 的功能所写的一个『程序(program)』,这个程序是使用纯文本文件(文件后缀名最好为sh文件,方便我们管理),将一些 shell 的语法与指令(含外部指令)写在里面, 搭通配符.配正规表示法.管线命令与数据流重定向.条件判断.循环逻辑等功能,以达到我们所想要的处理目的. 构成(常见):shell语法和外部指令   通配符     [a-z]  [A-Z]     ?    *          正规表达式      管线命令

鸟书shell学习(三)shell脚本程序设计要点总结

一 注意事项 1.脚本的开头一行为 : #!/bin/bash 声明这个脚本需要的shell的名称 2.程序中出了"#!"之外的其他以#开头的都是注释内容 3.为了方面的使用系统命令,可以在程序的开始部分设置主要环境变量例如PATH 4.脚本程序的运行方法: sh example.sh 或者类似 bash example.sh chmod +x example.sh ; ./example.sh    ################################ 这两种执行方式都是

交互式shell和非交互式shell、登录shell和非登录shell的区别

交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(interactive shell and non-interactive shell)交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.退出.当你退出后,shell也终止了.s

Shell学习之Shell特性(一)

Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~username/.bashrc.\cp -rf /etc/hosts 快捷键 ^R ^D ^A ^E ^L ^U ^K ^S ^Q 前后台作业控制 输入输出重定向 输入与输出 管道 | tee 命令排序 命令和文件自动补齐功能 这个不说了,我们在输入命令的时候,按tab键补全. 命令历史记忆功能  hi

shell基础之shell相关概念

一.脚本介绍 1.脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, ASP,JSP,PHP(后端),SQL(数据库操作语言),Perl,Shell,python,Ruby,JavaFX, Lua等. 2.为什么要学习和使用shell? Shell属于内置的脚本 程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理) 语法简单,代码写起来比较轻松,

修改shell 将当前shell(默认是bash B SHELL )改为csh C SHELL

在修改当前shell时,用命令: usermod -s  /bin/csh   home home 为 你所想要改变的用户地址     此处home 为家目录,一般自己创建的用户都会在家目录下生成用户名,亦可单独指定,如/home/idcdpi 当然修改shell亦可配置   /etc/passwd 如下: # vi /etc/passwd修改 /bin/bash 为 /bin/csh 将永久改变所有用户的shell  为C shell -----------------------------

login shell 和 non-login shell 的区别

[login shell 和 non-login shell 的区别] login shell:去的bash时需要完整的登录流程.就是说通过输入账号和密码登录系统,此时取得的shell称为login shell non-login shell:取得sbash接口的方法不需要重复登录的举动.如以X Window登录登录linux后,再以X的图形界面启动终端机,此时那个终端机并没有需要输入账号和密码,那个bash环境就是non-login shell.在原本的bash环境下再次执行bash命令,同样

Shell学习笔记 - Shell变量

一.变量的命名 变量名必须以字母或下划线开头,由字母.数字.或下划线组成,变量名的长度不能超过255个字符. 二.变量的分类 1. 用户自定义变量 2. 环境变量 3. 位置参数变量 4. 预定义变量 三.用户自定义变量 用户自定义变量是“局部变量”,只能在当前的Shell中生效 1. 定义变量 变量名=变量值 示例: 注意:等号前后不能有空格,否则会出现以下错误提示: 2. 变量调用 $变量名 或 ${变量名} 示例: 3. 变量叠加 示例: 或: 4. 删除变量 unset 变量名 示例:

login shell与non-login shell的区别

Bash应该是我们每天日常工作接触最多的东西了,就像我们最忠实的朋友,我们有必要了解一下这位朋友的“习性”.Bash有几种不同的运行模式,login shell与non-login shell,interactive shell与non-interactive shell(比如执行shell脚本).这两种分类方法是交叉的,也就是说一个login shell可能是一个interactive shell,也可能是个non-interactive shell.在下列情况下,我们可以获得一个login

login shell 和 non-login shell 的相关问题

问题:通过su命令切换用户并没有进入该用户的shell环境.这是为什么? 要解决这个问题,我们必须清楚用login shell 和non-login shell的区别. login shell:去的bash时需要完整的登录流程.就是说通过输入账号和密码登录系统,此时取得的shell称为login shell non-login shell:取得sbash接口的方法不需要重复登录的举动.如以X Window登录登录linux后,再以X的图形界面启动终端机,此时那个终端机并没有需要输入账号和密码,那