Shell 技巧
- 使用
find | xargs -P的方式进行并行时,推荐find -print0 | xargs -0 -P的方式,使用Null(\0)作为分隔符,会更加鲁棒。Null是唯一不能在文件名中使用的字符。
- 使用数组动态构建参数,要比使用字符串动态构建方便且安全。
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 行开始删除)- 使用临时文件
- 前者是因为重定向到同一个文件,会导致文件被清空:shell 会先创建/清空目标文件,然后执行
!()用来匹配除某些候选项(例如文件)以外的其他候选项。