调试 bash 脚本库

调试 bash 脚本库

我有一个按特定顺序获取的文件列表

以下是一个例子

source "${edvart_trkrc}/marinex.rc"
source "${edvart_trkrc}/firefly.rc"
source "${edvart_trkrc}/navaid.rc"
source "${baikonur_trkrc}/buranex.rc"

source "${gunars_trkrc}/comseq.rc"
source "${gunars_trkrc}/comint.rc"

我想要一种方法来标记每个文件名,1以便设置启用调试的选项(通过 set-xv)或0-1 进行调试。

我希望用户能够做到这一点。也许有一个文件具有正确的顺序,如下所示

0 marinex.rc
0 firefly.rc
0 navaid.rc
1 buranex.rc
    
0 comseq.rc
0 comint.rc

或者也许有一些关于可能更方便用户使用的替代方法的建议。

答案1

这可以通过一个相对简单的脚本来完成。对于这两个选项,请确保您有一个debug-config包含问题内容的文件,但它还需要包含路径:(否则脚本将不知道每个文件的确切位置)

0 ${edvart_trkrc}/marinex.rc
0 ${edvart_trkrc}/firefly.rc
0 ${edvart_trkrc}/navaid.rc
1 ${baikonur_trkrc}/buranex.rc

0 ${gunars_trkrc}/comseq.rc
0 ${gunars_trkrc}/comint.rc

选项 1:修改源文件本身以进行调试

首先,在所有源文件(marinex.rcfirefly.rc)中确保以下行是第一行:(默认关闭调试)

set +xv

现在创建一个debug-set脚本并使其可执行:

#!/bin/bash

# define paths
edvart_trkrc="/define/the/path1"
baikonur_trkrc="/define/the/path2"
gunars_trkrc="/define/the/path3"

# reading each line
while read -r line; do
  # define options
  debug_st=$(echo "$line" | awk '{ print $1 }')
  filename=$(echo "$line" | awk '{ print $2 }')

  # change debug setting
  case "$debug_st" in
    0)
      sed -i 's/set -xv/set +xv/g' "$filename"
      ;;
    1)
      sed -i 's/set +xv/set -xv/g' "$filename"
      ;;
  esac
done < ./debug-config

确保您定义了debug-config文件中包含的所有变量路径。

现在,当您运行./debug-set脚本时,它将把每个源文件的第一行更改为set +xv如果配置包含0set -xv如果配置包含1

在任何其他情况下,它都不会执行任何操作。这将允许任何人轻松将调试配置集应用于debug-config源文件。

选项 2:直接在脚本中设置调试开关

另一种方法是直接在脚本中设置调试信息,该脚本与脚本非常相似debug-set,只不过它“只”提供文件,无论是否进行调试。

所以你不source-script要这样做:

source "${edvart_trkrc}/marinex.rc"
source "${edvart_trkrc}/firefly.rc"
source "${edvart_trkrc}/navaid.rc"
source "${baikonur_trkrc}/buranex.rc"

source "${gunars_trkrc}/comseq.rc"
source "${gunars_trkrc}/comint.rc"

然后执行以下操作:

#!/bin/bash

# reading each line
while read -r line; do
  # define options
  debug_st=$(echo "$line" | awk '{ print $1 }')
  filename=$(echo "$line" | awk '{ print $2 }')

  # change debug setting
  case "$debug_st" in
    0)
      set +xv
      source "$filename"
      ;;
    1)
      set -xv
      source "$filename"
      set +xv
      ;;
  esac
done < ./debug-config

现在,每个文件的命令都会在执行之前设置适当的调试选项,然后如果该选项已打开则将其再次关闭。

唯一的缺点是,由于调试选项是在文件源之前设置的,整个文件(命令source)的输出将成为调试信息的一部分。

相关内容