登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SeaRiver Blog

实力才是你一生最好的依靠!

 
 
 

日志

 
 

linux 重定向操作符全解  

2010-02-25 11:59:54|  分类: shell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
使用命令重定向操作符 (Redirection Operators)
可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到不同的位置。输入或输出数据流的位置即为句柄。
下表列出了可用于将命令输入和输出数据流进行重定向的操作符。
重定向操作符 说明
>  将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。
>> 将命令输出添加到文件末尾而不删除文件中的信息。
>& 将一个句柄的输出写入到另一个句柄的输入中。
默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。
下表将列出可用的句柄。
句柄          句柄的数字代号   说明
STDIN          0                       键盘输入
STDOUT      1                       输出到命令提示符窗口
STDERR      2                       错误输出到命令提示符窗口
UNDEFINED 3-9                    这些句柄由应用程序和各个具体工具单独定义。
数字 0 到 9 代表前 10 个句柄。可以使用命令 Cmd.exe 运行程序并将前 10 个句柄中的任何一个重定向到该程序。
要指定想使用的句柄,可在重定向操作符前面键入该句柄的数字。如果未定义句柄,则默认的  重定向输出操作符是 1。键入 > 或
1
复制句柄
重定向操作符 & 可以将输出或输入从一个句柄复制到另一个指定的句柄。例如,要将 dir 输出发送到 File.txt 并将错误输出发送到 File.txt,请键入:
dir>c:\file.txt 2>&1
复制句柄时,可以复制该句柄原状态的所有特性。例如,如果一个句柄具有只读访问的属性,则该句柄的所有副本都具有只读访问属性。不能将一个具有只读访问属 性的句柄复制为另一个具有只写访问属性的句柄。
重定向命令输出 (
sort
File.txt 的内容将以字母顺序列表的方式显示在命令提示符窗口中。
注意
0 是  的默认句柄。
重定向命令输出 (>)
几乎所有的命令都将输出发送到命令提示符窗口。即使将输出发送到驱动器或打印机的命令也会在命令提示符窗口显示消息和提示。
要将命令输出从命令提示符窗口重定向到文件或设备,请使用 > 操作符。可以在许多命令中使用该操作符。例如,要将 dir 输出重定向到 Dirlist.txt,请键入:
dir>dirlist.txt
如果 Dirlist.txt 不存在,Cmd.exe 将创建该文件。如果 Dirlist.txt 存在,Cmd.exe 将使用 dir 命令的输出替换文件中的信息。
要运行 netsh routing dump 命令,然后将命令输出发送到 Route.cfg,请键入:
netsh routing dump>c:\route.cfg
> 操作符可以打开具有只写访问属性的指定文件。所以,不能使用该操作符读取文件。例如,如果使用重定向 >&0 启动程序,则所有试图写入句柄 1 的操作都将失败,
因为句柄 0 最初是以只读访问大开的。
注意
1 是 > 重定向输出操作符的默认句柄。
使用
例如,要以句柄 0 输入读取(即 STDIN)的方式打开 File.txt,请键入:
要打开 File.txt,并在内容分类后将输出发送到命令提示符窗口(即 STDOUT),请键入:
sort
要查找 File.txt,然后将句柄 1(即 STDOUT)和句柄 2(即 STDERR)重定向到 Search.txt,请键入:
findfile file.txt>search.txt 2
要以句柄 0 输入读取(即 STDIN)的方式复制用户定义句柄 3,请键入:
使用 >& 操作符重定向输出和复制
如果将输出重定向到文件且指定了现有的文件名,Cmd.exe 将以只写方式打开文件并覆盖该文件内容。如果指定了句柄,Cmd.exe 将文件复制到现有句柄中。
要将用户定义句柄 3 复制到句柄 1,请键入:
>&3
要将包括句柄 2(即 STDERR)的所有输出从 ipconfig 命令重定向到句柄 1(即 STDOUT),然后将输出重定向到 Output.log,请键入:
ipconfig.exe>>output.log 2>&1
使用 >> 重定向操作符追加输出
要从命令中将输出添加到文件末尾而不丢失文件中已存在的任何信息,请使用两个连续的大于号(即 >>)。例如,下面的命令可以将由 dir 命令生成的目录列表追加到 Dirlist.txt 文件:
dir>>dirlist.txt
要将 netstat 命令的输出追加到 Tcpinfo.txt 的末尾,请键入:
netstat>>tcpinfo.txt
使用管道操作符 (|)
管道操作符 (|) 可以提取一个命令的输出(默认情况下是 STDOUT),然后将其导入另一个命令的输入中(默认情况下是 STDIN)。例如,下面的命令将对目录分类:
dir | sort
在本例中,将同时启动两个命令,但随后 sort 命令会暂停,直到它接收到 dir 命令的输出为止。sort 命令使用 dir 命令的输出作为输入,然后将输出发送到句柄 1(即 STDOUT)。
合并带重定向操作符的命令
可以通过合并带有其它命令和文件名的筛选器命令创建自定义命令。例如,可以使用以下命令存储包含“LOG”字符串的文件名:
dir /b | find "LOG" > loglist.txt
dir 命令的输出通过 find 筛选器命令发送。包含字符串 "LOG" 的文件名作为文件名列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存储在文件 Loglist.txt 中。
要在相同命令中使用多个筛选器,请使用管道 (|) 分隔筛选器。例如,下面的命令将搜索 C 盘上的每个目录以查找包含 "LOG" 字符串的文件名,并且在命令提示符窗口中每次显示一屏:
dir c:\ /s /b | find "LOG" | more
利用管道 (|) 可以将 Cmd.exe 导向为通过 find 筛选器命令发送 dir 命令输出。find 命令只选择包含字符串 "LOG" 的文件名。more 命令可以显示由 find 命令选择的文件名(在命令提示符窗口中每次显示一屏)。有关筛选器命令的详细信息,请参阅筛选器命令
预先的知识一:
引用: noclobber 禁止覆盖变量,设定 $noclobber 预设变量改变输出重定向特性
   
变量设定语法 set noclobber
    取消变量设定语法 unset noclobber
    这个 noclobber 变量,它的功能便是停止重定向符号“>”的覆盖(overwiting)已存在文件以及符号“>>”要将字符写入一个不存在的文件时, 自动产生该文件的特性。
仅用两个例子让读者明白,设定后的实际使用状况。
例子一:
        
% ps axu > testfile
        % set noclobber
        % echo "test set noclobber" > testfile
        testfile: File exists.
        % echo "test set noclobber" >! testfile
        %
        例子二:
        
% set noclobber
        % cat /etc/passwd >> nopass
        nopass: No such file or directory
        % cat /etc/passwd >>! nopass
        %

预先的知识二:
引用: 输入输出位置文件句柄:
STDIN(标准输入/Standard Input) 0
STDOUT(标准输出/Standard output) 1
STDERR(标准错误/Standard error) 2
引用:
>file   csh, sh   
将 STDOUT(标准输出/Standard output) 重定向到文件
(command > file)
>>file  csh, sh  
将 STDOUT(标准输出/Standard output) 字符串加到文件内容之后
(command >> file)




>>!file  csh  
将 STDOUT(标准输出/Standard output) 字符串追加到文件内容之后,当设定 $noclobber 时,可重写文件。
(command >>! file)
>!file  csh  
将 STDOUT(标准输出/Standard output) 重定向到新文件,当设定 $noclobber 时,可重写文件。
(command >! file)
>&file  csh  
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 重定向到文件
(command >& file)
>>& csh
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 字符串追加到文件内容之后
(command >>& file)
cmd.log 2

>&digit  sh  
切换 STDOUT(标准输出/Standard output) 到文件句柄
(command >cmd.log 2>&1)
>&-  sh  
关闭 STDOUT(标准输出/Standard output)
(command >&-)
>&! csh
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 重定向到文件,当设定 $noclobber 时,可重写文件。
(command >&! file)
>>&! csh
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 字符串加到文件内容之后,当设定 $noclobber 时,可重写文件。
(command >>&! file)


 引自:http://linux.chinaunix.net/bbs/viewthread.php?tid=1028086
  评论这张
 
阅读(2152)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018