2017-03-07 3 views
3

Für sh/bash/zsh gibt es https://github.com/koalaman/shellcheck aber es wird keine Unterstützung für Fisch mit ihm geben https://github.com/koalaman/shellcheck/issues/209 - gibt es Linters für Fisch?Gibt es einen Linter für Fische wie es für Bash mit Shellcheck gibt?

+2

Faho bereitgestellt bereits eine hervorragende Antwort, aber ich wollte darauf hinweisen, dass Fisch einen 'fish_indent' Befehl hat, die den Fisch Parser für Fisch-Code, welche Tools wie' gofmt' tut für Go-lang und 'Klirren zu tun nutzt "Format" für C/C++. Dieses Werkzeug könnte die Grundlage für einen 'fish_lint'-Befehl bilden. Jeder, der ausreichend motiviert ist, wird ermutigt, die Ärmel hochzukrempeln und den Code zu schreiben, um ein solches Kommando zu implementieren. –

Antwort

4

Nach meinem Wissen gibt es nicht (und das ist natürlich unmöglich zu beweisen).

Und wenn jemand so etwas schaffen würde, müsste man sich darüber einig sein, was die "typischen Anfänger-Syntax-Probleme" und "semantische Probleme, die eine Shell seltsam und kontra-intuitiv verhalten" sind.

Fisch hat nicht viele POSIX sh Warzen (wie es als Reaktion auf sie geschrieben wurde). Einige Beispiele aus den shellcheck README:

echo $1       # Unquoted variables 

Fisch zitiert Verhalten ist ganz anders - vor allem, gibt es kein Wort Spaltung auf Variablen, so unquoted Variablen in der Regel tun, was Sie wollen.

v='--verbose="true"'; cmd $v  # Literal quotes in variables 

Dies ist vermutlich ein (erfolgloser) Versuch, die Worttrennung zu verhindern, was nicht notwendig ist.

Dieses Beispiel veranschaulicht das Problem - es gibt mehrere Jahrzehnte im Wert von sh-Skripten. Die Fehler und nicht intuitiven Verhaltensweisen sind sehr gut bekannt. So gut bekannt, dass die üblichen, aber nicht korrekten Workarounds auch bekannt sind. Das ist bei Fischen einfach nicht der Fall.

(Offensichtlich sind andere Beispiele gelten auch für Fische, vor allem die „Frequently Befehle missbraucht“ Abschnitt.)


Einige Dinge in Fischen, die ich oft neue Benutzer wissen, stolpern über:

  • Unquoted-Variablen werden auf ein Argument pro Element in der Liste erweitert (da jede Variable eins ist). Das schließt Null ein, wenn die Liste leer ist, was ein Problem mit test ist - z. test -n $var wird 0 zurückgeben, da der eingebaute Test von Fisch einer der wenigen Teile ist, die POSIX-kompatibel sind (da POSIX verlangt, dass der Test mit einem Argument 0 zurückgibt). Doppelzitat, wenn Sie immer ein Argument benötigen.

  • {} erweitert, um nichts und {x} erweitert zu "x", die unter Angabe find -exec Bedürfnisse bedeutet, wie auch einige git commit-ishes ([email protected]{4}).