这个错误是什么意思? (SC2129:考虑使用{cmd1; cmd2;}>>文件而不是单独的重定向。)

时间:2015-05-12 14:58:26

标签: bash shell shellcheck

我正在编写脚本来为我的博客生成草稿帖子。运行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

1 个答案:

答案 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