我有一个按特定顺序获取的文件列表
以下是一个例子
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.rc
等firefly.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
如果配置包含0
,set -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
)的输出将成为调试信息的一部分。