我正在编写脚本来为我的博客生成草稿帖子。运行ShellCheck后,我会一直看到此错误。这是什么意思,有人可以提供一个例子吗?
SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects.
此外,我不确定我需要做什么才能将$title
的值传递到帖子的YAML中的"Title"
字段... < / p>
#!/bin/bash
# Set some variables
var site_path=~/Documents/Blog
drafts_path=~/Documents/Blog/_drafts
title="$title"
# Create the filename
title=$("$title" | "awk {print tolower($0)}")
filename="$title.markdown"
file_path="$drafts_path/$filename"
echo "File path: $file_path"
# Create the file, Add metadata fields
echo "---" > "$file_path"
{
echo "title: \"$title\""
} >> "$file_path"
echo "layout: post" >> "$file_path"
echo "tags: " >> "$file_path"
echo "---" >> "$file_path"
# Open the file in BBEdit
bbedit "$file_path"
exit 0
答案 0 :(得分:9)
如果您点击shellcheck提供的消息,您将到达https://github.com/koalaman/shellcheck/wiki/SC2129
在那里你可以找到以下内容:
有问题的代码:
echo foo >> file date >> file cat stuff >> file
正确的代码:
{ echo foo date cat stuff } >> file
<强>理由:强>
而不是添加&gt;&gt;你可以在每一行之后找到一些东西 只需对相关命令进行分组并重定向该组。
<强>例外强>
这主要是一个风格问题,可以自由忽略。
所以基本上替换:
echo "---" > "$file_path"
{
echo "title: \"$title\""
} >> "$file_path"
echo "layout: post" >> "$file_path"
echo "tags: " >> "$file_path"
echo "---" >> "$file_path"
使用:
{
echo "---"
echo "title: \"$title\""
echo "layout: post"
echo "tags: "
echo "---"
} > "$file_path"
即使我建议您使用heredoc:
cat >"$file_path" <<EOL
---
title: "$title"
layout: post
tags:
---
EOL