免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5881 | 回复: 11
打印 上一主题 下一主题

关于shell里重定向到文件的一个问题(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-26 17:16 |只看该作者 |倒序浏览
本帖最后由 lzolder 于 2010-05-27 10:22 编辑

我第一次写较多行的shell,有问题请教

我所有的shell输出都需要重定向到一个文件,我发现我每次用一条命令实现后就得重定向一次,那我写完脚本不是要重定向N次了?
我不知道用什么方法解决比较好,请指点。

脚本如下:

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#Device Base Information

NOW=`date +%Y-%m-%d" "%H:%M:%S`
echo "PROFILE FOR  DEVICE($NOW)"  > config.txt
echo -e "\n" >> config.txt
echo "SUMMARY------------------------------" >> config.txt
lsdev -Ccadapter >> config.txt

短短几行我就重定向了4次,即我第一次用>重定向后,就得不停的将我的输出追加重定向>>到最终文件config.txt
这样太傻了

不知道有没有什么办法,只需要一次或灵活的重定向到最后的输出文件即可的方法
谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-05-26 17:22 |只看该作者
echo -e "PROFILE FOR  DEVICE($NOW)\nSUMMARY-------------"  
最下面那个命令我没有~

论坛徽章:
0
3 [报告]
发表于 2010-05-26 17:25 |只看该作者
本帖最后由 whoiswhozz 于 2010-05-26 17:26 编辑

先把脚本里的重定向先拿掉
然后
./sh.sh > config.txt
可以吗

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2010-05-26 17:28 |只看该作者

  1. exec 1>config.txt
  2. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3. #Device Base Information

  4. NOW=`date +%Y-%m-%d" "%H:%M:%S`
  5. echo "PROFILE FOR  DEVICE($NOW)"
  6. echo -e "\n"
  7. echo "SUMMARY------------------------------"
  8. lsdev -Ccadapter
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-05-26 17:30 |只看该作者
cat <<EOF >  config.txt
PROFILE FOR  DEVICE($NOW)

SUMMARY------------------------------
$(lsdev -Ccadapter)
EOF

论坛徽章:
0
6 [报告]
发表于 2010-05-26 17:32 |只看该作者
log()
{
$* >> $LOGFILE
}

论坛徽章:
0
7 [报告]
发表于 2010-05-26 18:05 |只看该作者
shell_HAT牛X
能解释一下吗?

论坛徽章:
0
8 [报告]
发表于 2010-05-26 18:15 |只看该作者
你直接 'echo >> file' 就可以了

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2010-05-26 20:36 |只看该作者
回复 7# lzolder


把1号文件描述重定向到config.txt,详解见ABS第293页。

Advanced Bash-Scripting Guide 3.9.1 中文版.pdf
http://bbs.chinaunix.net/thread-1610033-1-1.html

论坛徽章:
0
10 [报告]
发表于 2010-05-27 09:12 |只看该作者
谢谢LS。资料很好,我收藏了。我结合13问也来解释一下,看我的理解正确不?

exec 1 > config.txt
exec表示,让script在当前shell执行,并且父进程被结束;然后将标准输出stdout(1) 都重定向到config.txt

有个疑问:
shell_hat的资料里293页也提到了,就是如果在shell里写exec 1 > config.txt那么脚本里所有的输出都会被重定向到config.txt。如果是我脚本里部分内容想重定向到config.txt,而另外部分不想重定向呢?

我想到2个办法
1、自己写个echo函数,函数实现输出的格式,当需要时调用
2、按照ABS里的
需要的时候,exec 5 >&1
exec 1 > config.txt

不需要的时候 exec 1 >&5 5>&-
这条语句后就恢复标准输出了

不知是否理解正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP