shell脚本之教你如何获取上一条命令的内容及结果
发布日期:2021-05-28 17:11:57 浏览次数:26 分类:精选文章

本文共 1260 字,大约阅读时间需要 4 分钟。

应用场景

在之前的调试过程中,我们可能遇到过如下问题:当使用命令-x参数进行调试时,只能知道命令执行是否成功,但无法知道具体执行了什么命令。虽然通过这种方式可以快速定位问题,但因为输出的字符过多,视觉效果不够友好,这就让我们感到有些麻烦。
因此,我们是否可以记录每一条命令的具体内容及其执行结果呢?假设我们已经知道命令执行是否成功,但却不知道具体运行的是什么命令,这会带来什么问题呢?让我通过例子来说明。

实现方法

为了实现这一目标,我们可以编写一个简单的脚本模板。这个脚本模板的核心思想是在每条命令执行前记录命令本身,以及执行结果。这样,当我们需要回溯问题时,直接查看记录就可以清楚地知道问题出在哪一步。

脚本模板

下面是一个简单的脚本模板,该脚本接收命令作为参数并执行:

#!/bin/bashincr() {    echo -e "\n swamp=$(date +'%Y%m%d_%H%M%S') $1" >> /tmp/log    $1 > /dev/null    if [[ "$?" -eq "0" ]]; then        echo -e "执行的命令: [$1] executives: success"    else        echo -e "执行命令: [$1] executives: failure"    fi}

脚本的逻辑非常简单:

  • 首先,脚本会记录当前的时间戳和命令内容到/tmp/log文件中。
  • 将执行结果通过标准错误输出到 /dev/null,这样可以避免混杂结果.log文件中干扰信息。
  • 如果命令成功(即返回值为0),则记录“成功”;否则记录“失败”。

执行结果

让我们来看一下实际执行效果:

#!/bin/bashincr() {    echo -e "\n $(date +'%Y%m%d_%H%M%S') $1" >> /tmp/log    $1 > /dev/null    if [[ "$?" -eq "0" ]]; then        echo -e "执行的命令: [$1]	执行结果: 成功"    else        echo -e "执行命令:[$1]	执行结果: 失败"    fi}echo "第一条命令" cmd "ip a"  echo "第二条命令" cmd "rm -f dd"  echo '第三' cmd 'sd'

通过运行上述脚本可以看到以下结果:

[root@controller ~]# bash t第一条命令执行的命令: [ip a]	执行结果: 成功第二条命令执行的命令: [rm -f dd]	执行结果: 成功第三t: 行2: sd: 未找到命令执行命令:[sd]	执行结果: 失败

从结果可以看出,两个命令正确执行了,而第三个命令因为sd命令不存在而失败。

这样处理后,不仅可以清晰地知道每条命令的具体内容,还能记录是否成功。这可能是一个简单但有效的解决方案。如果你对脚本还有其他要求,随时告诉我。

上一篇:使用Docker实现vsftpd配置——匿名访问只读篇
下一篇:时间同步提示:the NTP socket is in use, exiting

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月30日 00时51分40秒