当前位置:首页 » 《随便一记》 » 正文

Linux shell之重定向

19 人参与  2022年07月09日 08:17  分类 : 《随便一记》  评论

点击全文阅读


文章目录

前言一、输出重定向二、输入重定向三、重定向原理总结


前言

我们有些时候想要将命令的输出保存起来,而不仅仅是让它输出到显示器上(终端上)。将命令的输出保存再文件中后方便分析输出的内容。重定向也可以是输出也可以是输入。

一、输出重定向

输出重定向:将命令的输出发送的一个文件中,终端输出的内容会被保存到输出文件中

bash shell : >    输出的内容会覆盖已有文件的内容bash shell : >>   输出的内容追加到已有的文件中

在这里插入图片描述
覆盖重定向:
在这里插入图片描述
追加重定向:
在这里插入图片描述

二、输入重定向

输入重定向:将文件的内容重定向到命令中

bash shell : <    将文件的内容重定向命令中,作为命令的输入bash shell : <<   输入不需要文件进行重定向,只需要在命令行中指定用于输入重定向的数据即可

输入重定向:
wc命令用来对数据中的文本进行计数,默认情况下:
文本的行数 文本的单词个数 文本的字节数
在这里插入图片描述
内联输入重定向:
必须指定一个文本标记来划分输入数据的开始结尾。任何字符串都可以作为文本标记,单开始和结尾的文本标记必须一致
(1)以EOF作为文本标记
在这里插入图片描述
(2)以hi作为文本标记
在这里插入图片描述

三、重定向原理

来自于我的这篇文章:Linux fork 写时复制

分离fork和exec的做法在构建Linux shell的时候非常有用,这给了shell在fork之后exec之前运行代码的机会,这些代码可以在运行一个全新的程序前改变环境。
shell也是一个用户程序,它会显示一个提示符,等待用户的输入。
当我们向shell输入一个命令(一个可执行的程序)时,shell就在文件系统中找到这个可执行的程序,通过调用fork()创建新进程,并调用exec系列函数来执行这个可执行的程序,调用wait()等待该命令的完成。子进程执行结束后,shell从wait()返回并再次输出提示符,等待用户的下一条命令。

那么现在我们通过一个小例程来体会一下fork + exec组合分离的强大功能:

#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/wait.h>#include <fcntl.h>#include <string.h>int main(){    int ret = fork();    if(ret == 0){//fork之后,exec执行之前,来改变一些子进程运行的环境//关闭 STDOUT_FILENO : 标准输出,对应的文件描述符为 1        close(STDOUT_FILENO);        //打开file.txt文件,这样 wc 的执行结果写入file.txt文件中        open("./file.txt", O_CREAT | O_WRONLY | O_TRUNC , S_IRWXU);        char *my_args[3];        my_args[0] = strdup("wc");        my_args[1] = strdup("fork_exec.c");        my_args[2] = NULL;//执行exec函数,运行一个新shell程序:wc fork_exec.c        execvp(my_args[0], my_args);            }else if(ret > 0){        wait(NULL);            }else{        printf("fork error\n");        return -1;    }    return 0;}

从结果可以看出两者运行的结构一致:
wc用来统计指定文件的行数、字数,以及字节数。
在这里插入图片描述
shell重定向的原理:当shell调用fork完成子进程的创建后,shell在调用exec()之前先关闭了标准输出,
然后打开文件redirect.txt,这样shell命令wc 的输出结果就被发送到文件redirect.txt中,而不是输出给标准输出,打印在屏幕上。
在这里插入图片描述

总结

注意,不管是输出重定向还是输入重定向,命令总是在左边。重定向的符号指向数据的流动方向。


点击全文阅读


本文链接:http://zhangshiyu.com/post/42938.html

<< 上一篇 下一篇 >>

  • 评论(1)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 桃花依然笑春风全书+后续+结局(陆乘渊云梵音)列表_桃花依然笑春风(陆乘渊云梵音)桃花依然笑春风全书+后续+结局在线
  • 经年离歌愁未休,顾允廷宋卿落结局+番外完结完本_完本经年离歌愁未休,顾允廷宋卿落结局+番外完结
  • 「当了七年舔狗,发现认错人了」后续已完结_「尤曜江月路妤」小说精彩章节分享
  • 经年离歌愁未休完结全书顾允廷宋卿落在线
  • 爱意生根已成恨全(宋云祈)
  • 他站在回忆尽头全书+后续+结局(乔若兮沈辞安)免费_(他站在回忆尽头全书+后续+结局)乔若兮沈辞安列表_笔趣阁(乔若兮沈辞安)
  • 「成全他和养姐后,他却不乐意了」节选免费试读_「裴衍乔乔温霁」节选高光片段速递‌
  • 完结文经年离歌愁未休全书+后续+结局列表_完结文经年离歌愁未休全书+后续+结局(顾允廷宋卿落)
  • (番外)+(全书)顾尘傅雅宁(神女老婆,却在背地承欢作乐+后续+结局)_顾尘傅雅宁免费列表_笔趣阁(神女老婆,却在背地承欢作乐+后续+结局)
  • 霍沉洲沈青禾在线品鉴列表_霍沉洲沈青禾在线品鉴
  • 神女老婆,却在背地承欢作乐+全书+番外(顾尘傅雅宁)列表_神女老婆,却在背地承欢作乐+全书+番外(顾尘傅雅宁)结局篇+番外在线
  • 综武反派我的师娘是黄蓉龙云郭靖+后续+完结_综武反派我的师娘是黄蓉龙云郭靖+后续+完结列表

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1