.bashrc
端末で対話的に使用するためにmyで定義されたいくつかの関数があります。私は通常、その意図された用途を説明する説明を前に付けます。
# Usage: foo [bar]
# Foo's a bar into a baz
foo() {
...
}
ソースコードをナビゲートする場合は問題ありませんが、type
関数が何をしているのかをすばやく覚えたい場合は、端末で実行する方が良いでしょう。しかし、これには(もちろん)コメントは含まれません。
$ type foo
foo is a function
foo ()
{
...
}
type
これにより、「この注釈が持続し、Pythonの精神で表示できるとしたらいいのではないか?」と思いました。ドックストリング私はこれを思い出しました:
foo() {
: Usage: foo [bar]
: "Foo's a bar into a baz"
...
}
$ type foo
foo is a function
foo ()
{
: Usage: foo [bar];
: "Foo's a bar into a baz";
...
}
type
これで使用量が出力に含まれます。もちろん、引用はエラーが発生しやすい問題になりますが、うまくいけばより良いユーザーエクスペリエンスを提供します。
だから私の質問はこれが悪い考えですか? Bash機能ユーザーに追加のコンテキストを提供するためのより良い選択肢(例:man
/ for function)はありますか?info
理想的には、使用上のガイドラインが関数定義の近くにあり、ソースコードを見ている人も利点を得ることを望んでいますが、これを行うための「正しい」方法がある場合は、代替案が開いています。
編集するこれはかなり単純なヘルパー関数です。私はインタラクティブに追加のコンテキストを取得したかった。もちろん、フラグを解析するより複雑なスクリプトの場合はオプションを追加しますが、これらのスクリプトでは、--help
すべての項目にヘルプフラグを追加するのは少し面倒です。おそらくそれは私が受け入れる必要があるかもしれませんが、この:
ハッキングは合理的にうまくいくようです。
答え1
私はこれを行う良い方法が1つしかないとは思いません。
多くの関数、スクリプト、およびその他の実行可能ファイルは、ユーザーが提供したり-h
オプションで提供したりする場合にヘルプメッセージを提供します。--help
$ foo() {
[[ "$1" =~ (-h|--help) ]] && { cat <<EOF
Usage: foo [bar]
Foo's a bar into a baz
EOF
return;
}
: ...other stuff...
}
たとえば、
$ foo -h
Usage: foo [bar]
Foo's a bar into a baz
$ foo --help
Usage: foo [bar]
Foo's a bar into a baz
答え2
私は一度もかなり自分を説得して急落し、:
コマンドを疑似コメントとして使用します。特に、「コメント」が実際に評価するパラメータであり、副作用がある可能性があること(またはバグなどの問題が発生する可能性がある'
)について心配しました。私はまだアイデアの単純さが好きですが、トレードオフは正当化できないと思います。
ロゴや同様のものを使ってテキストの使用を提案することを躊躇するのは--help
常にそれに伴う問題でした。フラグを受け入れ始めると、通常(Bashで)必要な本格的なパラメータ解析にすばやく入ります。かなり多くの定型句。
このギャップを部分的に埋めるために、小さなユーティリティプログラムgetopts
この定型句を減らすにはラップします。まだ数行を占めているので、他の非常に小さな機能には使用しませんが、直接使用するよりもはるかにきれいですgetopts
。以下はフラグを使用した使用例です-h
(getopts
単一文字オプションのみがサポートされています)。
foo() {
local _usage='foo [-a] [-b] [-f val] [-v val] [args ...]'
eval "$(parse_opts 'f:v:abh')"
if (( h )); then
echo "Usage: $_usage"
return 0
fi
echo "f=$f v=$v a=$a b=$b -- $#: $*"
}