簡體   English   中英

使用重定向的stdin調用man來顯示BASH腳本中的幫助

[英]Calling man with redirected stdin to show help from within a BASH script

有沒有用,為什么任何理由man與重定向標准輸入從bash腳本中顯示的幫助是一個壞主意或不使用bash的所有(合理范圍內)的版本兼容?

這個技術適用於我可以輕松訪問的兩個版本的BASH:GNU BASH v.4.3.11和4.3.30(都在Linux上)。 在我看來,在腳本中顯示腳本幫助是一種優雅的方式,當下載它的人不太可能打擾安裝手冊頁時,手冊頁已經寫好了。

下面是我的意思的一個簡單的例子。 當在命令行上使用help選項時,將調用display_usage_message函數,並且當函數返回時腳本將調用exit

#!/bin/bash

display_usage_message()
{
man /dev/stdin <<EOF

.TH SCRIPT 1 "01 Oct 2015" "1.0" "SCRIPT VERSION 1.0"

.SH NAME
Script \- whatever it does.

.SH SYNOPSIS
script options etc.

.SH DESCRIPTION
This is a description which is not very long. :)
EOF
}

display_usage_message
exit

謝謝。

編輯:根據chepner的評論,這種輕微的變化是否可靠?

#!/bin/bash

display_usage_message()
{

temp_man_filename=$(mktemp -q -t "tmp.man.page.XXXXXX")

cat <<EOF >>$temp_man_filename

.TH SCRIPT 1 "01 Oct 2015" "1.0" "SCRIPT VERSION 1.0"

.SH NAME
Script \- whatever it does.

.SH SYNOPSIS
script options etc.

.SH DESCRIPTION
This is a description which is not very long. :)
EOF

man $temp_man_filename

rm $temp_man_filename
}

display_usage_message
exit

期望是幫助消息是一個簡短的 - 理想情況下,不是一個屏幕 - 提醒可用的功能,而手冊,相反,應該解釋概念和文檔錯誤消息,退出代碼,操作約束等。

更基本的是,將部分或全部文檔保存在源代碼中或與源代碼相結合是良好的實踐,例如在Knuth的文字編程中得到積極推動,並且由Perl POD和Javadoc作者實踐(可能不那么嚴格和正式)。

順便說一下,在這個時代, man標記感覺有些模糊。 也許你會想要探索POD或Markdown作為更友好,更現代的替代方案(雖然不太適合高級用途)。 POD很容易嵌入shell腳本中,格式化工具將安裝在Perl的任何地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM