私は開発プロジェクトで通常行う多くのタスクを自動化する多くのbash機能を頻繁に作成して登録します。その世代は、私が作業しているプロジェクトのメタデータによって異なります。
次のように作成されたプロジェクトに関する情報で、これらの関数に注釈を付けたいと思います。
func1() {
# This function was generated for project: PROJECT1
echo "do my automation"
}
理想的には、定義を調べるときにコメントを見ることができます。
$ type func1
func1 is a function
func1 ()
{
# This function was generated for project: PROJECT1
echo "do my automation"
}
しかし、なんだか強く打つ関数が実行されたときではなく、関数がロードされたときにコメントが無視されるようです。したがって、コメントが失われ、次の結果が得られます。
func1 is a function
func1 ()
{
echo "do my automation"
}
関数にメタデータを割り当てて調べる方法はありますか?タイプチェック定義を使用すると検索できますか?
答え1
function func_name()
{
: '
Invocation: func_name $1 $2 ... $n
Function: Display the values of the supplied arguments, in double quotes.
Exit status: func_name always returns with exit status 0.
' :
local i
echo "func_name: $# arguments"
for ((i = 1; i <= $#; ++i)); do
echo "func_name [$i] \"$1\""
shift
done
return 0
}
答え2
はい、type
実行する関数の一部だけを出力するようです。実際にはそれが照会するときに関心を持つ部分なので、実際にはそれが合理的なようですtype
。
回避策としてコメントを使用する代わりに、次のメタデータを追加してください。
func1() {
meta="This function was generated for project: PROJECT1"
echo "do my automation"
}
実際にこの変数を使用する必要はありませんが、次のように関数を照会するときに表示されますtype
。
$ type func1
func1 is a function
func1 ()
{
meta="This function was generated for project: PROJECT1";
echo "do my automation"
}
答え3
あなたはそれを使用することができますいいえ内蔵:
。また、変数として保存する必要もありません。
function f() {
: your metadata here
: "or here"
# do yours
}
編集する:メタデータの特殊文字に注意してください。プレーンテキストの場合は、次のものを使用できます。
: <<EOT
Your metadata text here.
EOT
編集する:グローバル連想配列を使用して、すべての機能のメタデータを保存できます。
declare -A METADATA=()
METADATA[fun1]='foo bar'
function fun1() {
echo I have some metadata: "${METADATA[$FUNCNAME]}"
}
METADATA[fun2]='baz you'
function fun2() {
echo I have some other metadata: "${METADATA[$FUNCNAME]}"
}
これにより、declare
orの出力を解析する必要がなく、type
配列内の対応するキーを照会するだけです。
答え4
あなたはこれを行うことができます。
$ f() { This function does nothing. 2> /dev/null; }
$ f
$ type f
f is a function
f ()
{
This function does nothing. 2> /dev/null
}