亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 9417 | 回復(fù): 10
打印 上一主題 下一主題

[其他] 即時輸出并記日志文件 及 exec重定向 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-10-15 14:09 |只看該作者 |倒序瀏覽
本帖最后由 hujysh 于 2012-10-16 10:26 編輯

希望實現(xiàn)一個功能,想找個方便些的方法。

shell腳本,很多語句,希望所有的標(biāo)準(zhǔn)輸出及錯誤輸出都即時顯示在屏幕(以方便監(jiān)視),程序運行完還希望所有那些輸出記錄在日志文件

我知道
prgname 2>&1 | tee -a LOGFILE
能實現(xiàn)

但是不希望在運行時候加 管道,可以在程序內(nèi)部就實現(xiàn)這個功能嗎?程序里面該如何寫?

把這句話:
prgname 2>&1 | tee -a LOGFILE  單獨寫成一個程序當(dāng)然也能實現(xiàn);

或者

fun() {...}
fun 2>&1 | tee -a LOGFILE  
也能實現(xiàn);

但是還有沒有別的方法?
用exec重定向可以同時輸出到屏幕嗎?

求答案。。。
本問題特請 blackold大俠 發(fā)表下看法  8樓9樓給了個可行的方法 可是還是嫌麻煩

論壇徽章:
0
2 [報告]
發(fā)表于 2012-10-15 15:33 |只看該作者
沒有人理啊。

fun 2>&1 | tee -a LOGFILE
為什么不想用呢? 一個是很不爽,什么都包進(jìn)去,本來不是函數(shù)的概念;還一個是 因為加了管道,fun里面的變量帶不出來。

有沒有好辦法呢?

論壇徽章:
0
3 [報告]
發(fā)表于 2012-10-15 15:55 |只看該作者
回復(fù) 1# hujysh


    tail -f  ?
不用管腳本代碼,里面只管添加日志就行了,tail -f 會在日志文件發(fā)生變化時,輸出追加的日志內(nèi)容。。

論壇徽章:
0
4 [報告]
發(fā)表于 2012-10-15 16:06 |只看該作者
回復(fù) 3# personball


實際情況不是單一的一個程序,只有一個的話可以直接記log文件,再tail -f來監(jiān)控

實際是該小程序只是一個大程序中的一個步驟,監(jiān)控只針對這個大程序進(jìn)行,所以希望小程序能有直接輸出。

論壇徽章:
0
5 [報告]
發(fā)表于 2012-10-15 16:23 |只看該作者
給一個小例子,
  1. #!/bin/sh

  2. mainfun()
  3. {
  4.    ls abc  #some commands
  5.    ret=$?
  6.    echo in mainfun, ret is [$ret]
  7. }

  8. ret=0
  9. mainfun 2>&1 | tee x.log
  10. echo after mainfun, ret is [$ret]
  11. exit $ret
復(fù)制代碼
本來期望exit code是mainfun中賦值過的ret,但是達(dá)不到效果。

論壇徽章:
16
IT運維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2015-10-14 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-10-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-11-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT運維版塊每日發(fā)帖之星
日期:2016-04-15 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-21 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-08-16 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運維版塊每日發(fā)帖之星
日期:2015-08-14 06:20:00
6 [報告]
發(fā)表于 2012-10-15 17:10 |只看該作者
不知道是不是很簡單,只需要
#!/bin/sh

set -x
.....

即可?

論壇徽章:
0
7 [報告]
發(fā)表于 2012-10-15 17:18 |只看該作者
回復(fù) 6# expert1


不是啊。。。

請以5樓的例子看,
我希望標(biāo)準(zhǔn)輸出  和 錯誤輸出 都寫入日志文件 x.log
同時希望 輸出能即時顯示
還希望能得到正確的返回碼

set -x 把執(zhí)行過程打出來了,可是。。。

多謝!

論壇徽章:
1
辰龍
日期:2014-05-22 11:38:58
8 [報告]
發(fā)表于 2012-10-15 18:08 |只看該作者
試試
  1. #!/bin/bash

  2. process()
  3. {
  4.     ls abc
  5.     date
  6.     sleep 2
  7. }

  8. LOGFILE="/tmp/log.txt"
  9. touch $LOGFILE
  10. tail -f $LOGFILE &
  11. pid=$!

  12. exec 3>&1
  13. exec 4>&2
  14. exec &>$LOGFILE
  15. process
  16. ret=$?
  17. exec 1>&3 3>&-
  18. exec 2>&4 4>&-

  19. kill -15 $pid

  20. exit $ret
復(fù)制代碼

論壇徽章:
0
9 [報告]
發(fā)表于 2012-10-16 09:29 |只看該作者
回復(fù) 8# winway1988


謝謝!

這個回復(fù)不錯,基本思想可以采納,再完善一下可以使用,
需要加 意外中止時對 tail -f 進(jìn)程的處理;
由于日志文件每次執(zhí)行應(yīng)該追加,而tail -f會將整個文件輸出,所以得采用臨時文件,程序意外中止時也應(yīng)維護(hù)臨時文件。

我本以為要求是很簡單的,可是實現(xiàn)起來卻蠻麻煩。
   

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
10 [報告]
發(fā)表于 2012-10-19 13:33 |只看該作者
回復(fù) 1# hujysh


    汗,是 expert1 提醒我來看的。:wink:

   汗,首先我還配不上"特請“啥的,壇里只是 W神有這個資格。

   可以考慮用 compound command 或 FIFO。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP