五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

如何利用 tee 命令調(diào)試shell腳本中的管道

發(fā)布日期:2022-01-30 00:39 | 文章來源:源碼中國

實例

下面是一個簡單的腳本,腳本中 processid 函數(shù)的作用是查詢指定進程名字的進程ID,在管理linux服務(wù)器的過程中,這個是很常見的功能,processid 函數(shù)作用是利用多層管道命令查詢進程ID,以下是測試腳本源碼

#!/bin/sh
processid()
{
 ipid=$(ps -ef | grep -w $1 | grep -v grep | awk '{print $2}')
 echo $ipid
}
case "$1" in
 i)
 processid $2
;;
 *)
  echo "parameter error..$1"
;;
esac

執(zhí)行腳本

我們執(zhí)行這個腳本查詢 zone9_log1 的進程ID,下面是執(zhí)行的結(jié)果

[wanng@localhost ~]$ ./a.sh i zone9_log1
130530 144391 144392

為了和 zone9_log1 進程實際的進程ID對比,我們單獨執(zhí)行 ps -ef | grep -w zone9_log1 | grep -v grep | awk '{print $2}' 命令,執(zhí)行結(jié)果如下:

[wanng@localhost ~]$ ps -ef | grep -w zone9_log1 | grep -v grep | awk '{print $2}'
130530

問題

同樣的命令,確得到了不同的結(jié)果,我們在腳本中加入 tee 命令輸出管道的中間結(jié)果,調(diào)整之后的的腳本如下:

processid()
{
 ipid=$(ps -ef | grep -w $1 | tee out1 | grep -v grep | tee out2 | awk '{print $2}') | tee out3
 echo $ipid
}
case "$1" in
 i)
 processid $2
;;
 *)
  echo "parameter error..$1"
;;
esac

再次執(zhí)行腳本,本地會生成 out1 out2 out3 三個文件,記錄這管道命令的中間結(jié)果,下面是腳本執(zhí)行結(jié)果以及 out1 out2 out3 文件的內(nèi)容

[wang@localhost ~]$ ./a.sh i zone9_log1
130530 144885 144886
[wang@localhost ~]$ cat out1
wang1305301  0 4月24 pts/10  00:07:47 ./zone9_log1 ./zone9_log1.lua
wang 144885 109338  0 20:45 pts/8 00:00:00 /bin/sh ./a.sh i zone9_log1
wang 144886 144885  0 20:45 pts/8 00:00:00 /bin/sh ./a.sh i zone9_log1
wang 144888 144886  0 20:45 pts/8 00:00:00 grep -w zone9_log1
[wang@localhost ~]$ cat out2
wang1305301  0 4月24 pts/10  00:07:47 ./zone9_log1 ./zone9_log1.lua
wang 144885 109338  0 20:45 pts/8 00:00:00 /bin/sh ./a.sh i zone9_log1
wang 144886 144885  0 20:45 pts/8 00:00:00 /bin/sh ./a.sh i zone9_log1
[wang@localhost ~]$ cat out3
130530
144885
144886
[wang@localhost ~]$ 

原因

執(zhí)行腳本的時候,默認會創(chuàng)建一個新的shell(也即一個新的進程),上面的腳本 a.sh 就是在新的shell環(huán)境中執(zhí)行的。從上面的測試結(jié)果可以看出,ps -ef | grep -w zone9_log1 命令的結(jié)果中包含了執(zhí)行腳本身啟動的進程和我們要查詢的目標(biāo)進程,我們只需要過濾掉腳本本身的進程,就可以得到準(zhǔn)確的進程ID,調(diào)整之后的腳本如下(暫時先保留 tee命令輸出的中間結(jié)果):

processid()
{
 ipid=$(ps -ef | grep -w $1 | grep -v $0 | tee out1 | grep -v grep | tee out2 | awk '{print $2}') | tee out3
 echo $ipid
}
case "$1" in
 i)
 processid $2
;;
 *)
  echo "parameter error..$1"
;;
esac

上面processid函數(shù)中 grep -v $0 作用是過濾掉腳本的名字,其中 $0 表示腳本的名字 ( a.sh )

驗證

再次執(zhí)行腳本,結(jié)果如下:

[wanng@localhost ~]$ ./a.sh i zone9_log1
130530
[wanng@localhost ~]$ cat out1
wanng1305301  0 4月24 pts/10  00:07:51 ./zone9_log1 ./zone9_log1.lua
wanng 146170 146168  0 21:11 pts/8 00:00:00 grep -w zone9_log1
[wanng@localhost ~]$ cat out2
wanng1305301  0 4月24 pts/10  00:07:51 ./zone9_log1 ./zone9_log1.lua
[wanng@localhost ~]$ cat out3
130530

從上面的測試結(jié)果中看出,最后輸出的結(jié)果是正確的

總結(jié)

多層管道在shell腳本中是很常見的用法,使用起來也非常方便和高效的,但是腳本一旦出問題調(diào)試就會變得困難起來,合理的使用 tee 命令輸出管道的中間結(jié)果,可以快速的定位問題所在

以上就是如何利用 tee 命令調(diào)試shell腳本中的管道的詳細內(nèi)容,更多關(guān)于tee 命令調(diào)試shell腳本中的管道的資料請關(guān)注本站其它相關(guān)文章!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部