Chinaunix首页 | 论坛 | 博客
  • 博客访问: 753263
  • 博文数量: 217
  • 博客积分: 2401
  • 博客等级: 大尉
  • 技术积分: 2030
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-16 06:58
个人简介

怎么介绍?

文章分类

全部博文(217)

文章存档

2023年(2)

2022年(3)

2021年(29)

2020年(12)

2019年(5)

2018年(5)

2017年(5)

2016年(3)

2015年(6)

2014年(12)

2013年(16)

2012年(9)

2011年(6)

2010年(15)

2009年(30)

2008年(59)

我的朋友

分类:

2009-02-09 08:46:39

有三个最重要的输入输出流:标准输入(stdin),标准输出(stdout),标准错误(stderr)。它们对于控制台(“控制台”指的是键盘用于输入,屏幕用于输出)来说是缺省的,但是它们可以被重定向。 
  重定向标准输出,可以使用“>”符号,举例: 

  dir my_dir > filelisting.txt 

  将把 dir 命令的标准屏幕输出重定向到文本文件 filelisting.txt 文件里,所以屏幕上没有任何输出。这个文件可以用来编辑(比如使用 pico 文本编辑器)或者合并到其他的文件里。 

  重定向标准错误,可以使用结构“2>”,举例: 

  dir my_dir 2> errorlisting.txt 

  以上命令将送标准输出到屏幕上,如果没有错误信息,将没有任何信息写到 errorlisting.txt 文件里。如果出错,则没有什么东西输出到屏幕,而文件 errorlisting.txt 将包含错误信息。错误信息有可能是这样的: 

  dir: my_dir: Permission denied 

  最后,我也可以把标准输出和标准错误一起输出到同一个文件里, 

  dir my_dir > file_and_error_listing.txt 2>&1 

  以上命令先重定向标准输出到文本文件里,然后再重定向标准错误到和标准输出同样的位置。它如何实现可能看起来有点古怪,但是是可行的。 

  在以上的例子里,如果重定向的文件已经存在,该文件会被覆盖。如果你要追加到该文件的末尾,可以使用“>>”符号,以上的例子就变成: 

dir my_dir >> filelisting.txt 
dir my_dir 2>> errorlisting.txt 
dir my_dir >> file_and_error_listing.txt 2 > &1 

  如果你对“2>”感到很迷惑,这里有一个简单的办法可以帮你理解,标准流有标准的解析器:“0”代表标准输入,“1”代表标准输出,“2”代表标准错误。 

  dir my_dir > file.txt 

  是以下命令的简写方式: 

  dir my_dir 1 > file.txt 

  那么以下命令就是用来输出标准错误: 

  dir my_dir 2 > file.txt 

  还有,你还可以使用符号“|”(管道命令)把一个命令的标准输出送到另外一个命令的标准输入。在以下这个标准的例子里,dir 命令的标准输出通过管道输入到命令 more 里(输出满屏的时候自动暂停): 

  dir | more 

  你还可以使用“tee”命令把标准输出同时写到文件和屏幕, 

  dir | tee filelisting.txt 

  tee 是“T型连接器”的模拟音,在管道中的主要的用途是分流。 

  这个部分这样都用来讲述标准输出重定向,对于标准输入重定向不像标准输出重定向那么有用,但是它可以使用以下方式实现: 

  cat < my_file 

  还有一种叫做“直接插入式”的标准输出,可以通过“<<”来实现。不要管它了,看起来对我没有什么实际用处。不过,如果你真的想知道,这里有一个例子(这里“>”式第二个提示符) 

  cat << my_marker 
  > my_line_from_the_keyboard 
  > another_line_from_the_keyboard 
  > my_marker 

  除了重定向到常规文件和“过滤器”之外(如以上的例子所示),你还可以重定向到设备和其他特殊文件。看下面这些例子。 

  重定向到设备文件的例子。以下命令将显示文件列表到第四个文本终端: 

  dir > /dev/tty4 

  以下是一个重定向到一个特殊的 FIFO (先进先出)文件的例子。该命令送信息”you are lucky”到叫做“lucky”的 ICQ 用户 UIN 7777777 (假定你已经用你的 ICQ 程序连接到 ICQF 服务器上了) 

  echo message 7777777 “you are lucky” < ~/.licq/licq_fifo 

   以上的例子能够工作是因为在你 licq 目录下的文件“licq_fifo”是一个特别的 FIFO 序列文件。以上这个例子,对比于在图形用户界面下的 ICQ 程序有什么特别有用的地方吗?举个例子,你可以写一个短的脚本带上多个信息给你的那些 ICQ 伙伴们: 

#!/bin/bash 
echo Messaging UIN: $1 Message: $2 Times: $3 
# The next command puts puts your licq in the status "on-line, invisible". 
echo 'status *online' > ~/.licq/licq_fifo 
c=0 
while [ $c -le $3] 
do 
echo message $1 $2 > ~/.licq/licq_fifo 
c=`expr $c + 1` 
echo $c " " 
done 
echo 'status offline' > ~/.licq/licq_fifo 
echo "all done" 
    这个例子利用了 licq 通信模型(FIFO文件)和简单的文件重定向功能,给你一个关于如何 “自动化”licq 的主意。

其实还有一个非常好用的参数在上面并没有提及:
  make zImage &>log
  vim log

就是把所有输出存储到log文件中,然后你可以用vim或cat来查看.


 原文地址

阅读(1143) | 评论(0) | 转发(0) |
0

上一篇:sum of series

下一篇:Design Pattern: Singleton

给主人留下些什么吧!~~