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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 3113 | 回復(fù): 9
打印 上一主題 下一主題

[學(xué)習(xí)共享] 如何輸出到兩處并取返回值? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-04-15 10:13 |只看該作者 |倒序?yàn)g覽
本帖最后由 hujysh 于 2014-04-15 10:21 編輯

該程序目的是執(zhí)行一系列命令,輸出定向到文件,同時(shí)輸出到屏幕,并需要取每個(gè)命令的返回值。
程序如下,請(qǐng)注意P1  P2的兩句。
經(jīng)多次測(cè)試,正常是P1的先做,但是有時(shí)候是P2的先做,這樣cat $TF就得不到命令的返回值了。
不知道如何解釋?如何解決?請(qǐng)高手支招。
  1. $ cat y.sh
  2. #!/bin/sh

  3. quit()
  4. {
  5.   exit $1
  6. }

  7. fdate()
  8. {
  9.   date "+%Y%m%d-%H:%M:%S"
  10. }

  11. elog()
  12. {
  13.    printf "$*\n"
  14.    [ -w $LOGFILE ] && printf "$*\n" >> $LOGFILE
  15. }

  16. init()
  17. {
  18.     date
  19.     return 0
  20. }

  21. fun()
  22. {
  23. echo arg1 is $1
  24. echo arg2 is $2
  25. return 0
  26. }

  27. #----------------------------
  28. # MAIN Main main
  29. #----------------------------
  30. LOGFILE=logfile

  31. #TMPDIR=/tmp/.$(basename $0).$(basename $configfile).tmp.$
  32. #rm -rf $TMPDIR >/dev/null 2>&1
  33. TF=tf

  34. elog "$(fdate)" $(basename $0) $* begin "\n"

  35. TASKNUM=3
  36. TASKNAME1=TASK001            PRG1=init  
  37. TASKNAME2=T000            PRG2="ls y.sh"
  38. TASKNAME3=test0          PRG3="fun A B"

  39. #-----proc tasks-----
  40. i=1
  41. while [ $i -le $TASKNUM ]; do
  42.   PRG=$(eval echo "\$PRG$i")
  43. ( ( eval "$PRG" 2>&1 );echo $?>$TF) | tee -a $LOGFILE           #####  #### #P1
  44. ret=$(cat $TF)                                                          ######   ####  #P2
  45.   rm $TF
  46.   [ $ret -ne 0 ] && eval proctaskfail "\$TASK$i" $ret "\$PRG$i"
  47.   eval elog "$(fdate)" TASK: "\$TASK$i" "\$PRG$i" done with code $ret
  48.   i=$((i+1))
  49. done

  50. elog "\n$(fdate)" $(basename $0) $* done

  51. quit 0

  52. $
復(fù)制代碼
正常的運(yùn)行結(jié)果如下:
  1. $ sh y.sh
  2. 20140415-10:08:52 y.sh begin

  3. Tue Apr 15 10:08:52 EAT 2014
  4. 20140415-10:08:52 TASK: init done with code 0
  5. y.sh
  6. 20140415-10:08:52 TASK: ls y.sh done with code 0
  7. arg1 is A
  8. arg2 is B
  9. 20140415-10:08:52 TASK: fun A B done with code 0

  10. 20140415-10:08:52 y.sh done
  11. $
復(fù)制代碼
多次測(cè)試的結(jié)果不一樣,以下是某次測(cè)試的結(jié)果,############是我手工加上的,需要關(guān)注的部分:
  1. $ sh -x y.sh
  2. + LOGFILE=logfile
  3. + TF=tf
  4. + fdate
  5. + basename y.sh
  6. + elog 20140415-09:44:55 y.sh begin \n
  7. 20140415-09:44:55 y.sh begin

  8. + TASKNUM=3
  9. + TASKNAME1=TASK001 PRG1=init
  10. + TASKNAME2=T000 PRG2=ls y.sh
  11. + TASKNAME3=test0 PRG3=fun A B
  12. + i=1
  13. + [ 1 -le 3 ]
  14. + + eval echo $PRG1
  15. + echo init
  16. PRG=init
  17. + eval init
  18. + 2>& 1
  19. + tee -a logfile
  20. + echo 0
  21. + 1> tf
  22. + init
  23. Tue Apr 15 09:44:55 EAT 2014
  24. + +cat tf
  25. ret=0
  26. + rm tf
  27. + [ 0 -ne 0 ]
  28. + fdate
  29. + eval elog 20140415-09:44:55 TASK: $TASK1 $PRG1 done with code 0
  30. + elog 20140415-09:44:55 TASK: init done with code 0
  31. 20140415-09:44:55 TASK: init done with code 0
  32. + i=2
  33. + [ 2 -le 3 ]
  34. + + eval echo $PRG2
  35. + echo ls y.sh
  36. PRG=ls y.sh
  37. + tee -a logfile
  38. + eval ls y.sh
  39. + 2>& 1
  40. + ls y.sh
  41. y.sh
  42. + echo 0
  43. +1> tf
  44. + +cat tf
  45. ret=0
  46. + rm tf
  47. + [ 0 -ne 0 ]
  48. + fdate
  49. + eval elog 20140415-09:44:55 TASK: $TASK2 $PRG2 done with code 0
  50. + elog 20140415-09:44:55 TASK: ls y.sh done with code 0
  51. 20140415-09:44:55 TASK: ls y.sh done with code 0
  52. + i=3
  53. + [ 3 -le 3 ]
  54. + + eval echo $PRG3
  55. + echo fun A B
  56. PRG=fun A B
  57. + tee -a logfile
  58. + eval fun A B
  59. + 2>& 1
  60. + fun A B
  61. arg1 is A
  62. arg2 is B
  63. + echo 0
  64. + +cat tf
  65. +> tf
  66. ret=
  67. + rm tf
  68. +[ -ne 0 ]                                               ####################################
  69. y.sh[55]: test: Specify a parameter with this command.   ###############################
  70. + fdate
  71. + eval elog 20140415-09:44:55 TASK: $TASK3 $PRG3 done with code
  72. + elog 20140415-09:44:55 TASK: fun A B done with code
  73. 20140415-09:44:55 TASK: fun A B done with code
  74. + i=4
  75. + [ 4 -le 3 ]
  76. + fdate
  77. + basename y.sh
  78. + elog \n20140415-09:44:55 y.sh done

  79. 20140415-09:44:55 y.sh done
  80. + quit 0
  81. $  
復(fù)制代碼
  1. 機(jī)器信息
  2. $ uname -a
  3. HP-UX MYNAME B.11.31 U ia64 4178565595 unlimited-user license
復(fù)制代碼

論壇徽章:
93
2015年辭舊歲徽章
日期:2019-10-10 10:51:15CU大;照
日期:2014-02-21 14:21:56CU十二周年紀(jì)念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季節(jié)之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季節(jié)之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [報(bào)告]
發(fā)表于 2014-04-15 11:41 |只看該作者
回復(fù) 1# hujysh


    果然還是簡(jiǎn)化的程序看的懂啊,這個(gè)看不懂……

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2014-04-15 11:54 |只看該作者
回復(fù) 2# seesea2517


   

這個(gè)程序只要關(guān)注。校薄 。校病〉膬删
以及測(cè)試結(jié)果中 標(biāo)記 ################ 的部分

論壇徽章:
93
2015年辭舊歲徽章
日期:2019-10-10 10:51:15CU大;照
日期:2014-02-21 14:21:56CU十二周年紀(jì)念徽章
日期:2020-10-15 16:55:55CU大;照
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大;照
日期:2019-10-10 10:55:38季節(jié)之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季節(jié)之章:冬
日期:2019-10-10 10:57:17CU大;照
日期:2014-02-21 14:22:52CU大;照
日期:2014-03-13 10:40:30CU大;照
日期:2014-02-21 14:23:15
4 [報(bào)告]
發(fā)表于 2014-04-15 13:14 |只看該作者
回復(fù) 3# hujysh

我寫了個(gè)死循環(huán),運(yùn)行了一分鐘也沒看出錯(cuò)。跟系統(tǒng)有關(guān)系?
  1. while true; do ./y.sh ; sleep 1; done
復(fù)制代碼

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2014-04-15 16:19 |只看該作者
估計(jì)是有關(guān)系,我換到AIX的機(jī)器沒有發(fā)現(xiàn)問題,那個(gè)HPUX就有問題。
回復(fù) 4# seesea2517


   

論壇徽章:
93
2015年辭舊歲徽章
日期:2019-10-10 10:51:15CU大;照
日期:2014-02-21 14:21:56CU十二周年紀(jì)念徽章
日期:2020-10-15 16:55:55CU大;照
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大;照
日期:2019-10-10 10:55:38季節(jié)之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季節(jié)之章:冬
日期:2019-10-10 10:57:17CU大;照
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大;照
日期:2014-02-21 14:23:15
6 [報(bào)告]
發(fā)表于 2014-04-16 09:25 |只看該作者
hujysh 發(fā)表于 2014-04-15 16:19
估計(jì)是有關(guān)系,我換到AIX的機(jī)器沒有發(fā)現(xiàn)問題,那個(gè)HPUX就有問題。
回復(fù) 4# seesea2517

會(huì)不會(huì)跟CPU數(shù)量有關(guān)系呢?這個(gè)就太深入了不會(huì)。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2014-04-16 09:44 |只看該作者
為什么會(huì)懷疑到CPU數(shù)量?
我只懷疑到OS,或者該機(jī)器上/bin/sh的設(shè)計(jì),它沒有遵循語(yǔ)句依次的原則,有漏洞。
具體的說(shuō),
cmd;echo $? > file1 | cmd2
cat file1

>file1

cat file1
它沒有先后保證順序。

回復(fù) 6# seesea2517


   

論壇徽章:
93
2015年辭舊歲徽章
日期:2019-10-10 10:51:15CU大;照
日期:2014-02-21 14:21:56CU十二周年紀(jì)念徽章
日期:2020-10-15 16:55:55CU大;照
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大;照
日期:2019-10-10 10:55:38季節(jié)之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季節(jié)之章:冬
日期:2019-10-10 10:57:17CU大;照
日期:2014-02-21 14:22:52CU大;照
日期:2014-03-13 10:40:30CU大;照
日期:2014-02-21 14:23:15
8 [報(bào)告]
發(fā)表于 2014-04-16 09:52 |只看該作者
回復(fù) 7# hujysh


    那就是OS的事吧,這個(gè)不懂。

論壇徽章:
6
摩羯座
日期:2013-12-27 09:45:04技術(shù)圖書徽章
日期:2014-01-27 12:40:06辰龍
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
9 [報(bào)告]
發(fā)表于 2014-04-16 11:21 |只看該作者
本帖最后由 laliheyi 于 2014-04-16 11:23 編輯

回復(fù) 1# hujysh

echo 0
+ +cat tf
+> tf

這個(gè)操作系統(tǒng),還能如此,真是神奇了

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2014-04-16 16:07 來(lái)自手機(jī) |只看該作者
它貌似隨機(jī)的,多數(shù)情況正常,少數(shù)時(shí)候抽風(fēng)。
我理解,它保證了 cmd2 做完再做后面的 ret=$(cat tf),但忽略了判斷當(dāng)時(shí) >tf 這個(gè)也許是個(gè)新進(jìn)程 是否已經(jīng)完成。

我已經(jīng)換了個(gè)方式繞過這個(gè)問題。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP