返回顶部
首页 > 资讯 > 操作系统 >如何利用 tee 命令调试shell脚本中的管道
  • 581
分享到

如何利用 tee 命令调试shell脚本中的管道

shell管道tee调试shelltee调试管道 2022-06-04 23:06:34 581人浏览 八月长安
摘要

实例 下面是一个简单的脚本,脚本中 processid 函数的作用是查询指定进程名字的进程ID,在管理linux服务器的过程中,这个是很常见的功能,processid 函数作用是利用多层管道命令查询进程ID,以下是测试

实例

下面是一个简单的脚本,脚本中 processid 函数的作用是查询指定进程名字的进程ID,在管理linux服务器的过程中,这个是很常见的功能,processid 函数作用是利用多层管道命令查询进程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

执行脚本

我们执行这个脚本查询 zone9_log1 的进程ID,下面是执行的结果


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

为了和 zone9_log1 进程实际的进程ID对比,我们单独执行 ps -ef | grep -w zone9_log1 | grep -v grep | awk '{print $2}' 命令,执行结果如下:


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

问题

同样的命令,确得到了不同的结果,我们在脚本中加入 tee 命令输出管道的中间结果,调整之后的的脚本如下:


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

再次执行脚本,本地会生成 out1 out2 out3 三个文件,记录这管道命令的中间结果,下面是脚本执行结果以及 out1 out2 out3 文件的内容


[wang@localhost ~]$ ./a.sh i zone9_log1
130530 144885 144886

[wang@localhost ~]$ cat out1
wang      130530      1  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
wang      130530      1  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 ~]$ 

原因

执行脚本的时候,默认会创建一个新的shell(也即一个新的进程),上面的脚本 a.sh 就是在新的shell环境中执行的。从上面的测试结果可以看出,ps -ef | grep -w zone9_log1 命令的结果中包含了执行脚本身启动的进程和我们要查询的目标进程,我们只需要过滤掉脚本本身的进程,就可以得到准确的进程ID,调整之后的脚本如下(暂时先保留 tee命令输出的中间结果):


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函数中 grep -v $0 作用是过滤掉脚本的名字,其中 $0 表示脚本的名字 ( a.sh )

验证

再次执行脚本,结果如下:


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

[wanng@localhost ~]$ cat out1
wanng      130530      1  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
wanng      130530      1  0 4月24 pts/10  00:07:51 ./zone9_log1 ./zone9_log1.lua
[wanng@localhost ~]$ cat out3
130530

从上面的测试结果中看出,最后输出的结果是正确的

总结

多层管道在shell脚本中是很常见的用法,使用起来也非常方便和高效的,但是脚本一旦出问题调试就会变得困难起来,合理的使用 tee 命令输出管道的中间结果,可以快速的定位问题所在

以上就是如何利用 tee 命令调试shell脚本中的管道的详细内容,更多关于tee 命令调试shell脚本中的管道的资料请关注我们其它相关文章!

--结束END--

本文标题: 如何利用 tee 命令调试shell脚本中的管道

本文链接: https://lsjlt.com/news/21319.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何利用 tee 命令调试shell脚本中的管道
    实例 下面是一个简单的脚本,脚本中 processid 函数的作用是查询指定进程名字的进程ID,在管理linux服务器的过程中,这个是很常见的功能,processid 函数作用是利用多层管道命令查询进程ID,以下是测试...
    99+
    2022-06-04
    shell 管道 tee 调试shell tee 调试管道
  • 如何在Shell脚本中使用管道
    如何在Shell脚本中使用管道?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。示例1:生成一个8位的随机密码tr -dc A-Za-z0-9_...
    99+
    2023-06-09
  • 怎么在Shell脚本中跟踪调试命令的执行
    这篇文章主要介绍怎么在Shell脚本中跟踪调试命令的执行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的例子展示了如...
    99+
    2023-06-16
  • 如何使用linux shell 管道命令及管道命令与shell重定向区别
    这篇文章主要介绍“如何使用linux shell 管道命令及与shell重定向区别”,在日常操作中,相信很多人在如何使用linux shell 管道命令及与shell重定向区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-06-09
  • 如何使用Shell脚本test命令
    这篇文章主要讲解了“如何使用Shell脚本test命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Shell脚本test命令”吧!Shell中的 test 命令用于检查某个条件是否...
    99+
    2023-06-09
  • Shell脚本中的printf命令使用
    上一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf。 printf 命令模仿 C 程序库(library)里的 printf() 程序。 printf 由 P...
    99+
    2023-05-12
    Shell printf命令 Shell printf
  • 如何用PHP执行shell 脚本和 shell命令
    执行 shell 脚本: 或者首先使用 ssh2_connect 函数连接到远程主机,然后使用 ssh2_auth_password 函数进行身份验证。接下来,使用 ssh2_exec 函数执行 shell 脚本,将其输出流作为结果返回。...
    99+
    2023-08-31
    php linux 开发语言 Powered by 金山文档
  • 如何在Linux中启用Shell脚本的调试模式
    这篇文章的内容主要围绕如何在Linux中启用Shell脚本的调试模式进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!在Linux系统中脚本是一个可以储...
    99+
    2023-06-28
  • 如何用shell脚本执行hadoop命令
    要使用shell脚本执行Hadoop命令,可以按照以下步骤操作:1. 创建一个新的文本文件,并使用任何文本编辑器打开它(如vi、na...
    99+
    2023-10-11
    hadoop
  • 如何使用linux shell脚本xargs命令
    本篇内容主要讲解“如何使用linux shell脚本xargs命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用linux shell脚本xargs命令”吧!xargs是给命令传递参数的...
    99+
    2023-06-09
  • shell中如何调用python脚本
    要在shell中调用Python脚本,可以使用以下命令:```python script.py```其中,`python`是Pyth...
    99+
    2023-10-10
    shell python
  • shell脚本中如何获取命令的输出
    这篇“shell脚本中如何获取命令的输出”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“shell脚本中如何获取命令的输出”文...
    99+
    2023-06-29
  • Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child...
    99+
    2022-06-04
    脚本 实例 命令
  • 如何使用Shell脚本break和continue命令
    本篇内容介绍了“如何使用Shell脚本break和continue命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在循环过程中,有时候需要...
    99+
    2023-06-09
  • 如何在Shell脚本中调用另一个脚本
    如何在Shell脚本中调用另一个脚本?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。假如有脚本 first.sh:#!/bin/bash#------------------...
    99+
    2023-06-09
  • Shell脚本中的echo命令使用介绍
    目录引言1.显示普通字符串:2.显示转义字符3.显示变量4.显示换行5.显示不换行6.显示结果定向至文件7.原样输出字符串,不进行转义或取变量(用单引号)8.显示命令执行结果引言 Shell 的 echo 指令与 ph...
    99+
    2023-05-12
    Shell脚本echo命令 Shell脚本命令
  • SecureCRT如何使用rz命令上传shell脚本
    小编给大家分享一下SecureCRT如何使用rz命令上传shell脚本,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 今天yum install -y lrzsz 用rz上传本机文件,上传shell 脚本后执行脚本报错提示...
    99+
    2023-06-06
  • 如何在shell中使用expect命令进行远程执行命令脚本
    如何在shell中使用expect命令进行远程执行命令脚本?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。expect是用来实现自动交互功能的工具之一,使用expect-send...
    99+
    2023-06-09
  • 无法在shell脚本中使用cd命令如何解决
    这篇文章将为大家详细讲解有关无法在shell脚本中使用cd命令如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:#! /bin/bash# c.shcd&n...
    99+
    2023-06-09
  • shell脚本中$符号的命令使用汇总
        今天是远程办公的第4天,渐渐的找到了一点在家办公的节奏了,改了几个shell脚本,在改动过程中,发现还有一些知识点需要巩固,这里写出来,加深下印象。    关于$...
    99+
    2022-06-04
    shell $ shell $命令
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作