exec 重定向

文件中常用的重定向:

command > filename把把标准输出重定向到一个新文件中
command >> filename 把把标准输出重定向到一个文件中 (追加)
command 1 > fielname 把把标准输出重定向到一个文件中
command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把把标准错误重定向到一个文件中
command 2 >> filename 把把标准输出重定向到一个文件中 (追加)
command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中 (追加)
command < filename >filename2   把命令以 filename文件作为标准输入,以 filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到 delimiter分界符
command <&m 把把文件描述符 m作为标准输入
command >&m 把把标准输出重定向到文件描述符 m中
command <&- 把关闭标准输入

需要明确的一点是可以使用exec命令通过文件描述符打开和关闭文件。

>&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;如果n之前&那么n则被理解成文件的名字,当表明是文件描述符时需要加上&

<&n 标准输入复制自文件描述符 n;

<&- 关闭标准输入(键盘);

>&- 关闭标准输出;

n<&- 表示把 n 号输入关闭;

n>&- 表示把 n 号输出关闭;

exec 1>outfilename # 打开文件outfilename作为stdout。可以理解为把标准输出的东西都定向到outfilenam 中

exec 2>errfilename # 打开文件 errfilename作为 stderr。

exec 0<&- # 关闭 FD0。

exec 1>&- # 关闭 FD1。

exec 5>&- # 关闭 FD5。

下面来看一个小例子:

 1 exec 4<&0 0<desc
 2
 3 read line1
 4
 5 exec 0<&4
 6 echo $line1
 7
 8
 9 echo -n "please input number :"
10 read line2
11 echo $line2

desc可以推断出是一个文件

第一行的意思是把文件描述符0(标准输入)定向到文件描述符4,相当于把文件描述符0备份了一份保存在4中,然后把文件定向到文件描述符0,则以后的标准输入都是从文件desc中读取。

第三行 读入一行

第五行 原来是从desc中读,现在从文件描述符4中读,文件描述符4中保存的是原来文件描述符0的东西,所以现在从标准输入读(键盘)

第十行 从标准输入

时间: 2024-11-05 03:12:39

exec 重定向的相关文章

CentOS下输入输出重定向

nux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. Linux默认输入是键盘,输出是显示器.你可以用重定向来改变这些设置.比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了.输出也是一样,你可以把屏幕输出重定向到一个文件里,再到文件里去看结果.重定向操作符可以用来

【原创】java中的父进程子进程 —— 坑爹的java Runtime.getRuntime().exec

最近有一个需求,需要用一个java进程启动多个子进程来完成并发任务.由于必须给用户完成任务的反馈,所以需要父进程记录子进程的生命周期. exec方法返回一个Process对象,在当前进程内调用该对象的waitFor方法,然后父进程就会在该方法阻塞,那么只有在该Process结束的情况下,才会从waitFor中返回. 我写了两个类来测试: 一个是Father类: public class Father { private static int count = 0; private static i

使用exec

exec <filename命令会将stdin重定向到文件中. 从这句开始, 所有的stdin就都来自于这个文件了, 而不是标准输入(通常都是键盘输入). 这样就提供了一种按行读取文件的方法, 并且可以使用sed和/或awk来对每一行进行分析. 使用exec重定向stdin 1 #!/bin/bash 2 # 使用'exec'重定向stdin. 3 4 5 exec 6<&0 # 将文件描述符#6与stdin链接起来. 6 # 保存stdin. 7 8 exec < data-f

linux shell脚本编程笔记(五): 重定向

I/O重定向 简述: 默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上). 这3个文件和其他打开的文件都可以被重定向. 对于重定向简单的解释就是捕捉一个文件, 命令, 程序, 脚本, 或者甚至是脚本中的代码块的输出, 然后将这些输出作为输入发送到另一个文件, 命令, 程序, 或脚本中. 每个打开的文件都会被分配一个文件描述符.stdin, stdout, 和stderr的文件描述符分别是0, 1,

Bash : IO 重定向

标准输入/输出(standard I/O)可能是软件设计原则里最重要的概念了.这个概念就是:程序应该有数据的来源端.数据的目的端(输出结果的地方)已经报告问题的地方,它们分别被称为标准输入(standard input).标准输出(standard output)以及标准错误输出(standard error).程序不必知道也不用关心它的输入与输出背后是什么设备,当程序运行时,这些标准 IO 就已经打开并准备就绪了. 运行时的程序称为进程,在 Linux 系统中,对于每个进程来说,始终有 3 个

Bash内置命令exec和重定向

Bash内置命令exec可以替换当前程序而不需要启动一个新的进程,可以改变标准输入和输出而不需要启动一个新的子进程.如果文件用exec打开,read命令就会把文件指针每次指向下一行直到文件的末尾,如果要重新从文件开始读取,则必须把文件关闭再重新打开. 1.替换当前shell,执行某个命令,命令终止,shell也就终止了$exec ls 2.打开文件作为当前shell的标准输入$exec <file_name 3.打开文件作为当前shell的标准输出$exec >file_name 4.打开文件

exec 操作文件描述符实现IO重定向

1.intruduction exec 用来启动一个新shell来执行指定程序,它会清除现有shell环境,而不是开启子shell来执行命令. exec的另一种作用是操作文件描述符,而此时exec不会覆盖你当前的 shell 环境 2.sysopsis exec 程序/命令 3.exec实现高级IO IO的各种实现离不开对FD的操作,创建新的输入或输出文件描述符后,shell将在脚本退出时自动关闭它们,但有时也需要在脚本结束前手动关闭. 符号 意义 n>&m 将FD为m的输出复制到FD为n的

exec绑定重定向

格式: exec 文件描述符[n] <或> file或文件描述符或设备 在上面讲的输入,输出重定向 将输入,输出绑定文件或设备后.只对当前那条指令是有效的.如果需要在绑定之后,接下来的所有命令都支持的话.就需要用exec命令 实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [[email protected] shell]$ exec 6>&1 #将标准输出与fd 6绑定 [[email protected

linux exec使用小结

一.exec 总结 exec命令 作用 exec ls 在shell中执行ls,ls结束后不返回原来的shell中了 exec <file file中的内容作为标准输入(替代STDIN) exec >file 将标准输出写入file(替代STDOUT) exec 3<file 将file读入到文件描述符3中(此时,创建了文件描述符3) sort <&3 将文件描述符3作为临时输入,用于sort排序 exec 4>file 将写入文件描述符4中的内容写入file中(此时