为什么我的 bash 模式匹配在 'piped' 通过 nodejs exec 时无法正常工作?
Why does my bash pattern match not work properly when 'piped' through nodejs exec?
我正在 运行正在执行 git bash (windows)
上的命令
paste --delimiter=\n --serial src/libs/**/*[^.spec].js > test.js
使用 shopt:
globstar on
extglob on
这成功地从 src/libs 开始递归连接了所有 js 文件,但从终端执行时所有 *.spec.js 文件除外。
然而,当我通过 g运行t-shell (https://github.com/sindresorhus/grunt-shell) 运行 这个命令时,它也有效,但是:[^.spec] 被忽略了。意味着我所有的 *.spec.js 文件也进入 test.js。
对于 extglob(和 globstar),以下语法是正确的,其他 [^
..]
是负字符集。
paste --delimiter=\n --serial src/libs/**/!(*.spec).js > test.js
否则可以用find
find src/libs -name '*.js' ! -name '*.spec.js' -exec paste --delimiter='\n' --serial {} + > test.js
和
有区别吗
find src/libs ! -name '*.spec.js' -name '*.js' -exec cat {} + > test.js
我正在 运行正在执行 git bash (windows)
上的命令paste --delimiter=\n --serial src/libs/**/*[^.spec].js > test.js
使用 shopt:
globstar on
extglob on
这成功地从 src/libs 开始递归连接了所有 js 文件,但从终端执行时所有 *.spec.js 文件除外。
然而,当我通过 g运行t-shell (https://github.com/sindresorhus/grunt-shell) 运行 这个命令时,它也有效,但是:[^.spec] 被忽略了。意味着我所有的 *.spec.js 文件也进入 test.js。
对于 extglob(和 globstar),以下语法是正确的,其他 [^
..]
是负字符集。
paste --delimiter=\n --serial src/libs/**/!(*.spec).js > test.js
否则可以用find
find src/libs -name '*.js' ! -name '*.spec.js' -exec paste --delimiter='\n' --serial {} + > test.js
和
有区别吗find src/libs ! -name '*.spec.js' -name '*.js' -exec cat {} + > test.js