I/O 重定向

更新时间:
2024-03-14
下载文档

I/O 重定向

每一个应用程序都有三个标准文件描述符:0、1、2。

  • 0 代表标准输入,即 scanf、getc 等函数读取的文件;
  • 1 代表标准输出,即 printf、putc 等函数写入的文件;
  • 2 代表标准错误,即 perror 等函数写入的文件。

默认情况下,ttinyShell 将使用当前终端设备作为标准文件,ttinyShell 创建出的进程将继承 ttinyShell 标准文件设置。ttinyShell 中可以使用重定向语句将标准文件重定向为其他文件,也只有标准文件可被重定向。

重定向设置方法如下:

  • >file1>file 形式用于将标准输出重定向到某文件,以覆盖方式输出。如果文件不存在,会自动创建文件。

    [root@sylixos:/root]# echo $PATH
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# ll /apps/test/
          total items: 0
    [root@sylixos:/root]# echo $PATH >/apps/test/path
    [root@sylixos:/root]# ll /apps/test/
    -rw-r--r-- root     root     Mon Jul 31 16:41:08 2023     50 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH >/apps/test/path
    [root@sylixos:/root]# ll /apps/test/
    -rw-r--r-- root     root     Mon Jul 31 16:41:08 2023     50 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]#
    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/
          total items: 0
    [root@sylixos:/root]# echo $PATH 1>/apps/test/path 
    [root@sylixos:/root]# ll /apps/test/
    -rw-r--r-- root     root     Mon Jul 31 16:43:16 2023     50 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH 1>/apps/test/path 
    [root@sylixos:/root]# ll /apps/test/
    -rw-r--r-- root     root     Mon Jul 31 16:43:16 2023     50 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# 
    
  • 2>file 形式用于将标准错误重定向到某文件,以覆盖方式输出。如果文件不存在,会自动创建文件。

    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/  
          total items: 0
    [root@sylixos:/root]# echo $PATH 2 >/apps/test/path
    [root@sylixos:/root]# ll /apps/test/path
    -rw-r--r-- root     root     Mon Jul 31 16:47:26 2023     52 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 2 
    [root@sylixos:/root]# echo $PATH 2 >/apps/test/path
    [root@sylixos:/root]# ll /apps/test/path
    -rw-r--r-- root     root     Mon Jul 31 16:47:26 2023     52 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 2 
    [root@sylixos:/root]# 
    
  • &>file 形式用于将标准输出和标准错误重定向到某文件,以覆盖方式输出。

    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/  
          total items: 0
    [root@sylixos:/root]# echo $PATH &>/apps/test/path
    [root@sylixos:/root]# ll /apps/test/
    -rw-r--r-- root     root     Mon Jul 31 16:57:47 2023     50 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH &>/apps/test/path
    [root@sylixos:/root]# ll /apps/test/
    -rw-r--r-- root     root     Mon Jul 31 16:57:47 2023     50 B, path
          total items: 1
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]#
    
  • >>file1>>file 形式用于将标准输出重定向到某文件,以追加方式输出。

    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/  
          total items: 0
    [root@sylixos:/root]# echo $PATH >>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH >>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# 
    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/  
          total items: 0
    [root@sylixos:/root]# echo $PATH 1>>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH 1>>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# 
    
  • 2>>file 符号用于将标准错误重定向到某文件,以追加方式输出。

    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/  
          total items: 0
    [root@sylixos:/root]# echo $PATH 2>>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH 2>>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# 
    
  • &>>file 符号用于将将标准输出和标准错误重定向到某文件,以追加方式输出。

    [root@sylixos:/root]# rm /apps/test/path
    [root@sylixos:/root]# ll /apps/test/  
          total items: 0
    [root@sylixos:/root]# echo $PATH &>>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo $PATH &>>/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# 
    
  • 重定向语句不能单独使用要配合其他基本命令才可以,且要放到命令的最后面,和基本命令内容有空格隔开。

  • 重定向语句内部“>”或“<”符号左右不能有空格,但重定向语句整体和其他参数要有空格隔开。

    [root@sylixos:/root]# ll /apps/test/
          total items: 0
    [root@sylixos:/root]# echo $PATH > /apps/test/path
    can not process redirect.
    [root@sylixos:/root]# echo $PATH > /apps/test/path
    can not process redirect.
    [root@sylixos:/root]# echo $PATH >/apps/test/path
    [root@sylixos:/root]# cat /apps/test/path
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# 
    
  • 重定向语句部分不属于基本命令的参数部分,不会被基本命令解析,是 Shell 实现的特殊处理。如果重定向语句后面还有其他参数,都会被忽略。

    [root@sylixos:/root]# args 123 456 >test
    [root@sylixos:/root]# cat test    
    arg   1 is args
    arg   2 is 123
    arg   3 is 456
    [root@sylixos:/root]# args 123 456 >test  789
    [root@sylixos:/root]# cat test
    arg   1 is args
    arg   2 is 123
    arg   3 is 456
    [root@sylixos:/root]# args 123 456 0<test
    arg   1 is args
    arg   2 is 123
    arg   3 is 456
    [root@sylixos:/root]# 
    
  • 多个重定向语句同时使用时,只有最后一句有效。其他语句也会创建文件,但内容为空。

    [root@sylixos:/root]# echo abc >test1 >test2 >test3
    [root@sylixos:/root]# ll
    -rw-r--r-- root     root     Thu May 18 14:17:39 2023      5 B, test3
    -rw-r--r-- root     root     Thu May 18 14:17:39 2023      0 B, test2
    -rw-r--r-- root     root     Thu May 18 14:17:39 2023      0 B, test1
          total items: 3
    [root@sylixos:/root]# cat test3
    abc 
    [root@sylixos:/root]# echo abc >test3 >test2 >test1
    [root@sylixos:/root]# ll
    -rw-r--r-- root     root     Thu May 18 14:18:10 2023      0 B, test3
    -rw-r--r-- root     root     Thu May 18 14:18:10 2023      0 B, test2
    -rw-r--r-- root     root     Thu May 18 14:18:10 2023      5 B, test1
          total items: 3
    [root@sylixos:/root]# cat test1
    abc 
    [root@sylixos:/root]# 
    
文档内容是否对您有所帮助?
有帮助
没帮助