Skip to content

Latest commit

 

History

History
78 lines (56 loc) · 3.66 KB

so-you-are-writing-scripts.rst

File metadata and controls

78 lines (56 loc) · 3.66 KB

写 Bash / Python 脚本注意事项

不要使用绝对路径

编写脚本时,经常会在脚本中添加路径,比如编译一个特定目录的C文件,这时候不要直接将 自己的文件路径添加到脚本中,因为不同机器在运行时对应的路径可能存在差别,导致整个 脚本运行失败。

正确的方法是用变量来定义路径,并把绝对路径替换成相对路径。

对于交叉工具链,用脚本下载解压

当需要使用交叉工具链时,应该先从Ubuntu的launchpad或者Linaro官网上找,不要使用 百度云中的工具链资源,因为百度云中的资源可能有后门漏洞,无法确保安全性。使用交叉 工具链应该在脚本中依次:下载->解压->配置环境->使用。这样做在仓库中只有我们写的 脚本代码,不存在编译器的tar包,提高工作效率。

MORE @pandora

TODO

使用 Python3

没啥好说的。 Python2 已经死了。

尽量不要修改用户的环境配置

在脚本中尽量不要改变用户的环境配置,例如.bashrc、/etc/profile等,因为可能产生意 想不到的问题出现。建议使用export单独修改当前环境,脚本运行完成后对环境不产生其他 影响,雁过不留痕。

对环境有副作用的操作要考虑是不是幂等的

幂等指的就是一个操作多次重复产生的效果都是相同的,在脚本中许多情况下都需要注意将 操作修改成幂等的。例如,用脚本建立一个文件夹 mkdir test ,当第二次运行脚本时就会 出现已经有`test`这个文件夹无法生成的问题,所以对环境有副作用的操作需要考虑操作是 不是幂等的。

正确操作示例:

DIR = test
if[ -e ${DIR}]
then
    echo ${DIR} exist
else
    mkdir test
fi

命令行历史 + 一个循环

第一是战术层面的【写个 for 循环】:重复性的工作,上面的重复性的工作,是不是可以写一个 for 循环来做?

1. 简单的方法是,在你的电脑上,只用一个 terminal 来一步一步完成所有的工作。 1. 然后用 history 命令看到整个命令序列,复制粘贴到一个 editor 中。 1. 写一个 while true; do [...你的命令行历史]; sleep 500; done 的循环 1. 找个新目录,或者新的虚拟机来测试验证下,看看是否OK。 1. 根据错误提示,思考,修改,try harder

分治法:将环境初始化工作和重复性工作分开

这个方法就是经典笑话【将大象装进冰箱需要几步?(答案是3步:打开冰箱门;塞进大象;关上冰箱门】

而你现在做的事情是 【 确定哪些仓库和分支需要编译和测评,clone 下来编译一边确保配置没错误了; 写个循环♻️不停的 pull - build/compile - run tests - upload results/log; (不用关上冰箱门)】 根据这个思想,重新看自己的命令行历史,看看

1. 哪些应该在循环之内,哪些应该在之外执行? 1. 是否漏掉了一些环境变量或者前提条件?