23

bashコードに使用できるコマンドラインコードフォーマッターを探しています。構成可能で、できればコマンドラインから使用できる必要があります。

私はbashに大きなプロジェクトがあり、Qを念頭に置いて使用する必要があります。これまでのところ、Paul LutusによってPythonで書かれたプログラム(Rubyでの彼の以前のバージョンのリメイク)に満足しています。

http://arachnoid.com/python/beautify_bash_program.html(https://github.com/ewiger/beautify_bashにも複製されています)を参照してください。

しかし、このツールが存在する場合は、このツールの深刻な代替手段を学びたいと思います。要件:かなり複雑なコードを処理/解析するのに十分な堅牢なパフォーマンスと動作を提供する必要があります。

PS公用語の文法が存在しないため、bashコードの完全な解析は一般的に複雑であると思います(ただし、間違っている場合は訂正してください)。

4

4 に答える 4

14

vimに次のようにスクリプトを作成できます:「gg = G」は、「すべてのファイルをインデントする」ことを意味します

于 2012-11-23T00:30:08.033 に答える
13

shfmtを試してみることができます。Bashサポートを含む独自のシェルパーサーを実装しているため、プレーンテキストベースのツールよりも堅牢です。

また、パーサーとプリンターの両方がGoパッケージとして利用できるため、シェルコードを操作または操作するための20行のGoプログラムを簡単に作成できるはずです。

私が作者であることに注意してください。アドバイスは少し偏っているかもしれません:)

于 2018-03-11T19:33:21.943 に答える
3

typeビルトインが関数をフォーマットされた方法で印刷することを発見しました。

#/usr/bin/env bash

source <(cat <(echo 'wrapper() {') - <(echo '}'));
type wrapper | tail -n +4 | head -n -1 | sed 's/^    //g'

https://github.com/bas080/flush

于 2020-05-28T10:36:17.873 に答える
0

それどころか、シェルに厳密な文法があります。これは、英語のISO標準とBashおよびその他のシェルのドキュメント、および正式な用語でBashソースツリーのshell.yファイルの両方で説明されています。

「難しい」のは、たとえば引用符で囲まれた文字列を単一の字句トークンと考える場合です。シェルでは、すべてのメタ文字が個別の字句トークンであるため、文字の意味は文法的なコンテキストに応じて変わる可能性があります。

したがって、構文解析トークンは、ユーザーが考える「シェルワード」と一致せず、単純な引用符で囲まれた文字列は少なくとも3つのトークンです。

実装は通常、文法が引用符の内側、数値コンテキストの内側、またはその両方の外側にあるかどうかによって選択される複数の字句アナライザーの使用を含むいくつかのショートカットを取ります。

于 2021-05-19T15:44:27.617 に答える