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?
Antwort
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 Angabefind -exec
Bedürfnisse bedeutet, wie auch einige git commit-ishes ([email protected]{4}
).
- 1. Gibt es einen einfachen CLI Java-Linter?
- 2. Gibt es einen Standard-Ort für Bash-Skripte in Maven
- 3. Gibt es einen Vim, der Bash '! $' Entspricht?
- 4. Gibt es einen GUI-Client für PouchDB?
- 5. Gibt es einen Ersatz für Paste.Template?
- 6. Gibt es einen Builder für F # -Ereignisse?
- 7. Gibt es einen offiziellen Ersatz für CodeDom?
- 8. Gibt es einen Ersatz für MDTPtools?
- 9. Gibt es einen Ersatz für Transact-SQL
- 10. Gibt es einen Debugger für LLVM IR?
- 11. Gibt es einen Style-Checker für C++?
- 12. Gibt es einen Standard für den Kontextaustausch?
- 13. Gibt es einen Testaccount für Instagram?
- 14. Gibt es einen Omniauth für PHP?
- 15. Gibt es einen Quellcodeformatierer für Groovy?
- 16. Gibt es einen Farbdialog für WPF?
- 17. Gibt es einen "Mann" für Python?
- 18. Gibt es einen interaktiven Interpreter für C#?
- 19. Gibt es einen Link Checker für Schluck?
- 20. Gibt es einen Inhaltstyp für ein NRL?
- 21. Gibt es einen Ccache für Visual Studio?
- 22. Gibt es einen Emacs-Modus für Rscript?
- 23. Gibt es einen Railscast für Django?
- 24. Gibt es einen Interpreter für C?
- 25. Gibt es einen Base64Stream für .NET? woher?
- 26. Gibt es einen Realm-Browser für Linux?
- 27. Gibt es einen Metaprogrammierungsmusterkatalog für Python?
- 28. Gibt es einen Vorteil für dieses Makro?
- 29. Gibt es einen plattformübergreifenden Rahmen für C?
- 30. Gibt es einen Reflog für den Index?
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. –