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

Posted

技术标签:

【中文标题】这个错误是啥意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。)【英文标题】:What does this error mean? (SC2129: Consider using cmd1; cmd2; >> file instead of individual redirects.)这个错误是什么意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。) 【发布时间】:2015-07-23 13:07:27 【问题描述】:

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

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

此外,我不确定我需要做什么才能将 $title 的值传递给帖子 YAML 中的 "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

【问题讨论】:

echo 'foo'; echo 'bar'; echo 'baz'; >> file 而不是单独/重复的echo x >> file 【参考方案1】:

如果你点击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

【讨论】:

第一个版本多次打开和关闭文件。第二个只打开和关闭一次。没关系,但需要考虑。

以上是关于这个错误是啥意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。)的主要内容,如果未能解决你的问题,请参考以下文章

这个 cx_Freeze 错误是啥意思?

关于数据库的左外连接 右外连接的意思是啥

这个python openpyxl“ValueError”是啥意思?

报错String index out of range是啥意思?

在vs2017上重新建立一个project和.c文件是啥意思?

HTTP/1.1 302 Moved Temporarily是啥意思