Shell 技巧
- 使用
find | xargs -P 的方式进行并行时,推荐 find -print0 | xargs -0 -P 的方式,使用 Null(\0)作为分隔符,会更加鲁棒。
- 使用数组动态构建参数,要比使用字符串动态构建方便且安全。
head -n 8 example.yaml > example.yaml 和 head -n 8 example.yaml | tee example.yaml 是不工作的。
- 前者是因为重定向到同一个文件,会导致文件被清空:shell 会先创建/清空目标文件,然后执行
head 命令。
- 后者是因为
tee 会立即清空目标文件
- 解决方案:
head -n 8 example.yaml | sponge example.yaml(需要安装 sponge)
sed -i '9,$d' example.yaml(直接从第 9 行开始删除)
- 使用临时文件
!() 用来匹配除某些候选项(例如文件)以外的其他候选项。
ENV_VAR_TEST=something run_your_command ${ENV_VAR_TEST} 是不能如期工作的
- Shell 会先进行变量展开,但此时
ENV_VAR_TEST 还是没有值的
ENV_VAR_TEST=something 只是传递给子进程的环境变量定义,这也就是为什么如果 run_your_command 中处理了这个环境变量是可以正常工作的。
- 可以考虑
ENV_VAR_TEST=something; run_your_command ${ENV_VAR_TEST}