関数ヘッダの前に関数コメントが置かれると、印刷されません。

関数ヘッダの前に関数コメントが置かれると、印刷されません。

シェル機能にコメントを追加するためのすばらしく完全なガイドは次のとおりです。関数ヘッダーの前に配置してください。。可能な限りこのガイドラインに従おうとしましたが、これらの規則は関数のコメントを読みにくくしました。たとえば、私の関数のコメントにアクセスできません。

#######################################
# init the current directory with the required files to work with latex in Vscode's extension LaTeX workshop
# Arguments:
# $1 -> Main .tex file. Optional. Default to "main.tex"
#######################################
initlatex () {
    curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_default_preamble.tex > default_preamble.tex
    grep -q "\\input{default_preamble.tex}" ${1:-main.tex} || sed -i '2i\\\input{default_preamble.tex}\n' ${1:-main.tex}
    curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/Makefile > Makefile
    [[ ! -d .vscode ]] && mkdir --parents --verbose .vscode
    curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_vscode_makefile.json > .vscode/settings.json
}

端末から直接次のコマンドを使用してくださいwhich

❯ which initlatex
initlatex () {
    curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_default_preamble.tex > default_preamble.tex
    grep -q "\\input{default_preamble.tex}" ${1:-main.tex} || sed -i '2i\\\input{default_preamble.tex}\n' ${1:-main.tex}
    curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/Makefile > Makefile
    [[ ! -d .vscode ]] && mkdir --parents --verbose --parents --verbose .vscode
    curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_vscode_makefile.json > .vscode/settings.json
}

このベストプラクティスに違反することなく関数のコメントを印刷する別のコマンドはありますか?

答え1

1つのアプローチは、LISPプログラマが使用し、Pythonのような言語で採用したアプローチをとり、コメント構文を使用する代わりにドックストリングを使用することです。(ドックストリング)。 which/whence/type を使用すると、この内容が表示されます。 LISPでは、文字列は自分で評価され無視されます。シェルの場合は、これを割り当てる必要があります(例:_doc)。

gmt(){
   _doc="Show date in gmt"
   date -u "$@"
}

2番目の方法は、関数がパラメータを受け入れることに注意してください。最初の引数を使用して関数を呼び出すときに役立つ--helpルールを設定できます。クッシュ 93getoptsこれらの項目を簡単に作成できる拡張パーサーがあります。たとえば、env注文する。

答え2

厳密なコーディング規則を使用して、関数名に関連付けられた変数にドキュメントを配置します。たとえば、ああ、変数と関数が異なる名前空間にあるため、名前はまったく同じです。

initlatex='
#######################################
# init the current directory with the required
# files to work with latex in Vscode'\''s extension LaTeX workshop
# Arguments:
# $1 -> Main .tex file. Optional. Default to "main.tex"
#######################################
'
initlatex () {
    curl ...
}

これで、関数名を知ることでその文書を取得できます。

$ echo "$initlatex"

#######################################
# init the current directory with the required
# files to work with latex in Vscode's extension LaTeX workshop
# Arguments:
# $1 -> Main .tex file. Optional. Default to "main.tex"
#######################################

答え3

私は同じ方法でコーディングし、関数の上に詳細な説明を追加しましたが、関数自体に1行を追加しました。

function dewpoint() { # Calculate dewpoint(C) based on Temperature(C) and Humidity(%)

llfunctionsその後、1行の情報を表示する小さなスクリプトがあります。

dewpoint() Calculate dewpoint(C) based on Temperature(C) and Humidity(%)

llfunctions

#!/usr/bin/env bash
source ~/bin/functions-prt

list=(~/bin/functions-*)
[[ $1 ]] && list=("$@")

for fn in "${list[@]}"; do
    name=$(basename "$fn")
    prt-underline "$name"
    prt ""
    awk '/^function/ { printf "%25s", $2; $1=$2=$3=$4=""; $0=$0; print $0 }' "$fn"
    prt ""
done

答え4

which myfunction(あなたが使用しているように見えるzshから)関数コードのプリコンパイルされた型のシェル構文レンダリングを示します。

コンパイルされたコードの一部ではないため、(シェルだけでなくすべての言語で)コメントが見つかりません。表示されるコードは、関数を定義するコードと異なる場合があり、エイリアスが拡張され、インデントが変わり、行が削除され続け、短い形式が長い形式に変更されるなどの現象を確認できます。

ここでは、作成者が作成した実際のソースを見たいと思います。 .NETの代わりにファイルfile.javaでJava関数のソースコードを見たいのと同じです。file.classfile.class

では、zshファイルで定義されている関数に対して、次の方法でそのファイルを表示できます。

view $functions_source[myfunction]

(またはお気に入りのビューア/エディタ)ファイルがまだ存在しているとします。また、フレーズの強調表示やその他のビューア/エディタの恩恵を受けることができます。

type myfunctionまた、関数定義を読み取る場所も教えてくれます。

$ type ls _ls
ls is a shell function from /home/chazelas/.zshrc
_ls is a shell function from /usr/share/zsh/functions/Completion/Unix/_ls

関連情報