我有一个文件source-push.sh,它返回我要从find命令的结果中排除的文件列表。
它看起来像这样:
#!/usr/bin/env bash
find . -not \( -path './node_modules' -prune \) -name '*.js' | grep -vE $(echo $(./source-push.sh | xargs -I{} echo -n "{}|") | rev | cut -b2- | rev) | xargs -L1 standard --fix
find . -not \( -path './node_modules' -prune \) -name '*.css' | grep -vE $(echo $(./source-push.sh | xargs -I{} echo -n "{}|") | rev | cut -b2- | rev) | xargs -L1 stylelint --config stylelint.json
应该有一种比这更好地完成工作的方法。有什么建议?
代替:
... | grep -vE $(echo $(./source-push.sh | xargs -I{} echo -n "{}|") | rev | cut -b2- | rev ) | ...
你可以使用POSIX选项-F
和-f
:
... | grep -v -F -f <( ./source-push.sh ) | ...
-F
告诉grep这些模式是固定的字符串
(如果模式包含grep -E
特有的字符,则避免原始代码中断的问题)-f file
告诉grep使用来自file
的模式列表<( ... )
是一种将程序输出呈现为文件(命名管道)的bash方式