2015-05-12 7 views
6

Sto scrivendo uno script per generare bozze di post sul mio blog. Dopo aver eseguito ShellCheck, continuo a visualizzare questo errore. Cosa significa questo e qualcuno può fornire un esempio?Cosa significa questo errore? (SC2129: prendi in considerazione l'uso di {cmd1; cmd2;} >> invece dei singoli reindirizzamenti.)

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

Inoltre, non sono sicuro che cosa devo fare per passare il valore della $title al campo "Title" in YAML del post ...

#!/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' invece di separato/ripetuto 'echo x >> file' –

risposta

7

Se si fa clic nel messaggio dato da shellcheck, si arriverà a https://github.com/koalaman/shellcheck/wiki/SC2129

Là yo u può trovare il seguente:

codice Problematica:

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

codice corretto:

{ 
    echo foo 
    date 
    cat stuff 
} >> file 

Motivazione:

Invece di aggiungere un po '>> cosa dopo ogni singola linea, è possibile semplicemente raggruppare i comandi pertinenti e reindirizzare il gruppo.

eccezioni

questo è principalmente una questione stilistica, e può liberamente essere ignorato.

Quindi, in pratica sostituire:

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

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

Con:

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

Anche se vorrei suggerire di utilizzare un heredoc:

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

La prima versione apre e chiude il file più volte. Il secondo si apre e lo chiude solo una volta. Non importa molto, ma è qualcosa da considerare. –