2015-05-12 6 views
6

Ich schreibe ein Skript, um Draft-Posts für mein Blog zu erstellen. Nach dem Ausführen von ShellCheck sehe ich diesen Fehler Pop-up. Was bedeutet das und kann jemand ein Beispiel geben?Was bedeutet dieser Fehler? (SC2129: Verwenden Sie statt einzelner Weiterleitungen die Datei {cmd1; cmd2;} >>.)

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

Außerdem bin ich nicht sicher, was ich tun, um müssen den Wert von $title zum "Title" Feld in der YAML Post passieren ...

#!/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 'foo'; echo 'bar'; echo 'baz'; } >> file' statt separat/wiederholt 'echo x >> file' –

Antwort

7

Wenn Sie in die Nachricht von Shellcheck klicken, gelangen Sie zu https://github.com/koalaman/shellcheck/wiki/SC2129

Dort yo

Problematische Code:

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

Korrekter Code:

{ 
    echo foo 
    date 
    cat stuff 
} >> file 

Begründung:

Anstatt das Hinzufügen >> einige u können die folgenden finden Ding nach jeder einzelnen Zeile, können Sie einfach die relevanten Befehle gruppieren und die Gruppe umleiten.

Ausnahmen

Dies ist in erster Linie eine stilistische Frage und frei ignoriert werden kann.

So ersetzen im Grunde:

echo "---" > "$file_path" 
{ 
    echo "title: \"$title\"" 
} >> "$file_path" 

echo "layout: post" >> "$file_path" 
echo "tags: " >> "$file_path" 
echo "---" >> "$file_path" 

mit:

{ 
    echo "---" 
    echo "title: \"$title\"" 
    echo "layout: post" 
    echo "tags: " 
    echo "---" 
} > "$file_path" 

Auch wenn ich Ihnen ein heredoc verwenden würde vorschlagen:

cat >"$file_path" <<EOL 
--- 
title: "$title" 
layout: post 
tags: 
--- 
EOL 
+1

Die erste Version öffnet und schließt die Datei mehrmals. Das zweite öffnet und schließt es nur einmal. Es ist nicht sehr wichtig, aber es ist etwas zu beachten. –