12

我正在编写一个脚本来为我的博客生成草稿。运行ShellCheck后,我不断看到此错误弹出。这是什么意思,有人可以提供一个例子吗?

SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects.

另外,我不确定我需要做什么才能将值传递给帖子的 YAML 中$title的字段......"Title"

#!/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
4

1 回答 1

20

如果你点击shellcheck给出的消息,你会到达https://github.com/koalaman/shellcheck/wiki/SC2129

在那里您可以找到以下内容:

有问题的代码:

echo foo >> file
date >> file
cat stuff  >> file

正确代码:

{ 
  echo foo
  date
  cat stuff
} >> file

理由:

您可以简单地将相关命令分组并重定向该组,而不是在每一行之后添加 >> 某些内容。

例外

这主要是一个风格问题,可以随意忽略。

所以基本上替换:

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
于 2015-05-12T15:03:31.193 回答