通过覆盖文件生成Markdown中的代码块

时间:2019-04-25 20:40:40

标签: shell scripting markdown

你好,我正在尝试function upsert ( array, object, keyFn, updateFn = (target, object) => Object.assign(target, object), insertFn = object => object ) { const key = keyFn(object) const index = array.findIndex( value => keyFn(value) === key ) if (index !== -1) updateFn(array[index], object) else array.push(insertFn(object)) } let arr = [ { taxonomy: 'category', id: [10, 100] }, { taxonomy: 'post_tag', id: [20] } ] const obj = { taxonomy: 'category', id: 30 } upsert( arr, obj, o => o.taxonomy, // used to determine if existing object should be updated (t, o) => t.id.push(o.id), // operation for updating existing object ({ id, ...o }) => ({ ...o, id: [id] }) // return new object to insert ) console.log(arr)目录中文件的内容,并将它们作为代码块附加到markdown文件中。

我能够cat将文件的内容添加到降价文档中,但是无法在降价文件中添加反引号。反引号不会出现在文件中。如果我在shell中键入cat,但在以下bash脚本中却没有键入,我可以反引号打印:

printf "``"

1 个答案:

答案 0 :(得分:2)

find语句实际上找不到任何内容。没有名为*.h *.c的文件。您需要-o用于

find . -maxdepth 1 '(' -name "*.h" -o -name "*.c" ')'

反引号应位于输出文件中,没有任何理由。就是说,您是说要拥有三个?通常Markdown使用3作为代码块。它们可能也应该放在单独的行上。

for i in $files; do
    echo '```' >> report.md
    cat $i >> report.md
    echo '```' >> report.md
done

您可以一次重定向整个循环的输出。

for file in $files; do
    echo '```'
    cat "$file"
    echo '```'
done > report.md

为了获得更高的鲁棒性,我建议使用find -exec在每个文件上运行操作。这样,带有空格和其他奇怪字符的文件名将不会使脚本崩溃。

find . -maxdepth 1 '(' -name "*.h" -o -name "*.c" ')' \
    -exec echo '```' ';' -exec cat {} ';' -exec echo '```' ';' > report.md

或者您可以完全跳过find并仅循环浏览所需的文件。面对空格,这也是安全的:

for file in *.h *.c; do
    echo '```'
    cat "$file"
    echo '```'
done > report.md