2015-05-12 27 views
6

我正在編寫一個腳本來爲我的博客生成草稿。運行ShellCheck後,我不斷看到這個錯誤彈出。這是什麼意思,有人可以提供一個例子?這個錯誤是什麼意思? (SC2129:考慮使用{cmd1; cmd2;} >>文件而不是單個重定向。)

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 
+1

'{回聲 '富';回聲'酒吧';回聲'巴茲'; } >>文件'而不是單獨/重複的'echo x >>文件' –

回答

7

如果您點擊shellcheck給出的信息,您將到達https://github.com/koalaman/shellcheck/wiki/SC2129

有喲u能找到如下:

問題的代碼:

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 
+1

第一個版本打開和關閉文件幾次。第二次打開和關閉一次。這並不重要,但需要考慮。 –