LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1301|回复: 7

如何让一个Shell脚本的输出既显示,又在后台记录?

[复制链接]
发表于 2007-4-26 11:42:43 | 显示全部楼层 |阅读模式
任何一个脚本。我想让这个脚本在输出时(无论是标准或者错误)显示在屏幕上,又能在一个LOG中记录下所有的信息执行信息!
比如一个脚本文件名为:showfile,
#!/bin/bash
filename="$1"
cat $filename
在我执行这个脚本时,如果有一个参数,但此文件并不存在(或者存在),那么系统会提示错误(文件内容)的信息。而这些信息仅仅是是标准输出。我想知道如何让它将信息既标准输出,又能记录一个指定文件里?
感谢!
发表于 2007-4-26 12:24:37 | 显示全部楼层
try

  1. cat $filename 2>&1 |tee -a LOG
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-26 16:26:33 | 显示全部楼层
非常感谢!
不好意思!我可能是没有表达清楚!
比如我一个脚本,用来显示另一个文档的内容,当然直接使用cat命令即可,不过,我想学习一下脚本以及定向输入的写法。
我现有的一个脚本名叫:showfile,有可执行权限;
我是这样设计这个脚本的,运行此脚本时,需要有一个参数,即要被显示的文件名;如果无文件不存在或者无参数时,系统会自动报错信息的。
showfile的内容如下:
#!/bin/bash
filename="$1"
cat $filename
此时,我运行此脚本,有两个可能会发生:
1、如果我此脚本下有一个名为aaa的文件,而且此文件可以使用cat显示;
执行如下:
$./showfile aaa
结果:
会显示aaa的内容;
2、如果我输入的文件名不存在,或者没有输入文件名:
$./showfile
结果如下:
cat: : No such file or directory
现在问题是:
我如果在这两种情况下,都将输出的正确结果与错误结果都显示出来,并记录到一个指定的文件里。
使用cat $filename 2>&1 |tee -a LOG
仅在LOG中记录了错误的时的信息!
回复 支持 反对

使用道具 举报

发表于 2007-4-26 16:50:37 | 显示全部楼层
这是我的测试结果,你要的是那种形式?

  1. $ cat test
  2. #!/bin/bash
  3. filename=$1
  4. cat $filename 2>&1 |tee -a sss


  5. davistar@davi ~/shell/zz
  6. $ ./test 1.txt
  7. echo "NAS-Port-Id = "ip:219.133.73.15;ip:1.1.1.1""

  8. davistar@davi ~/shell/zz
  9. $ ./test 8.txt
  10. cat: 8.txt: No such file or directory

  11. davistar@davi ~/shell/zz
  12. $ cat sss
  13. echo "NAS-Port-Id = "ip:219.133.73.15;ip:1.1.1.1""
  14. cat: 8.txt: No such file or directory
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-26 17:13:56 | 显示全部楼层
不好意思!
你的测试结果是我想要的,可是我在这里执行的时候,脚本仅记录了错误的信息,而没有像你的:
$ cat sss
echo "NAS-Port-Id = \"ip:219.133.73.15;ip:1.1.1.1\""   #这个没有!
cat: 8.txt: No such file or directory    #仅有这一行!
请问这个为什么?
还有,可否麻烦给指教这样一个问题:
cat $filename 2>&1
这一行的意思是:将标准错误定向到标准输出对吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-26 17:17:41 | 显示全部楼层
不好意思!
我找到答案啦!
是我没写对!
还是得麻烦指教一下有关
cat $filename 2>&1
的问题!
非常感谢!
我的这个脚本主要用在一个这样的环境中:
目前有一个脚本,我不知道里面写的是什么内容,我无法得知。但它出现了故障,无法从系统的LOG中得到答案,所以,我想得用这样一个方法,看是否可以得到答案!
非常感谢您的帮助!
回复 支持 反对

使用道具 举报

发表于 2007-4-26 17:33:56 | 显示全部楼层
呵呵 客气
2>&1 的作用严格点说是通过复制文件描述符1来建立文件描述符2,实际效果就是合并了标准错误和标准输出

脚本的问题还是要具体分析:)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-26 18:07:29 | 显示全部楼层
好的,我刚开始学习脚本,所以有很多问题请教!
多谢!
有了您的帮助,我的进步一定会很快!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表