我們在linux上工作時,每個人都會遇到需要查找shell指令的幫助資訊的時候。 盡管内置的幫助像man pages、whatis指令有所助益, 但man pages的輸出非常冗長, 除非是個有linux經驗的人,不然從大量的man pages中擷取幫助資訊是非常困難的,而whatis指令的輸出很少超過一行, 這對初學者來說是不夠的。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaucme2czN6l3N0Ynd2hzN29GNwMTNyIzLchDMvwFOwUTMwIzLc1WdixWYvwFduVWboNWY0RXYvwVY0FGZvwVZt5CevJWcu42Y4VnbpxWLuR2Lc9CX6MHc0RHaiojIsJye.jpg)
在linux shell中解釋shell指令
jackson寫了一小段代碼,它能非常有效地在bash shell裡面解釋shell指令,可能最美之處就是你不需要安裝第三方包了。他把包含這段代碼的的檔案命名為“explain.sh”。
易嵌入代碼。
不需要安裝第三方工具。
在解釋過程中輸出恰到好處的資訊。
需要網絡連接配接才能工作。
純指令行工具。
可以解釋bash shell裡面的大部分shell指令。
無需使用root賬戶。
先決條件
唯一的條件就是'curl'包了。 在如今大多數linux發行版裡面已經預安裝了curl包, 如果沒有你可以按照下面的指令來安裝。
<code># apt-get install curl [on debian systems]</code>
<code># yum install curl [on centos systems]</code>
<a></a>
我們要将下面這段代碼插入'~/.bashrc'檔案(lctt譯注: 若沒有該檔案可以自己建立一個)中。我們要為每個使用者以及對應的'.bashrc'檔案插入這段代碼,但是建議你不要加在root使用者下。
我們注意到.bashrc檔案的第一行代碼以(#)開始, 這個是可選的并且隻是為了區分餘下的代碼。
#explain.sh 标記代碼的開始, 我們将代碼插入.bashrc檔案的底部。(備注:原代碼有誤,處理 https 時需要指定加密套件,據微信網友“高小樹”同學的改進,原來的<code>-gs</code>應該修改為<code>-g --ciphers ecdhe_ecdsa_aes_128_sha</code>。謝謝“高小樹”同學。)
<code># explain.sh begins</code>
<code>explain () {</code>
<code>if [ "$#" -eq 0 ]; then</code>
<code>while read -p "command: " cmd; do</code>
<code>curl -g --ciphers ecdhe_ecdsa_aes_128_sha "https://www.mankier.com/api/explain/?cols="$(tput cols) --data-urlencode "q=$cmd"</code>
<code>done</code>
<code>echo "bye!"</code>
<code>elif [ "$#" -eq 1 ]; then</code>
<code>curl -g --ciphers ecdhe_ecdsa_aes_128_sha "https://www.mankier.com/api/explain/?cols="$(tput cols) --data-urlencode "q=$1"</code>
<code>else</code>
<code>echo "usage"</code>
<code>echo "explain interactive mode."</code>
<code>echo "explain 'cmd -o | ...' one quoted command to explain it."</code>
<code>fi</code>
<code>}</code>
在插入代碼并儲存之後,你必須退出目前的會話然後重新登入來使改變生效(lctt譯注:你也可以直接使用指令<code>source ~/.bashrc</code> 來讓改變生效)。每件事情都是交由‘curl’指令處理, 它負責将需要解釋的指令以及指令選項傳送給mankier服務,然後将必要的資訊列印到linux指令行。不必說的就是使用這個工具你總是需要連接配接網絡。
讓我們用explain.sh腳本測試幾個筆者不懂的指令例子。
1.我忘了‘du -h’是幹嘛用的, 我隻需要這樣做:
<code>$ explain 'du -h'</code>
獲得du指令的幫助
2.如果你忘了'tar -zxvf'的作用,你可以簡單地如此做:
<code>$ explain 'tar -zxvf'</code>
tar指令幫助
3.我的一個朋友經常對'whatis'以及'whereis'指令的使用感到困惑,是以我建議他:
在終端簡單的地敲下explain指令進入互動模式。
<code>$ explain</code>
然後一個接着一個地輸入指令,就能在一個視窗看到他們各自的作用:
<code>command: whatis</code>
<code>command: whereis</code>
whatis/whereis指令的幫助
你隻需要使用“ctrl+c”就能退出互動模式。
4. 你可以通過管道來請求解釋更多的指令。
<code>$ explain 'ls -l | grep -i desktop'</code>
擷取多條指令的幫助
同樣地,你可以請求你的shell來解釋任何shell指令。 前提是你需要一個可用的網絡。輸出的資訊是基于需要解釋的指令,從伺服器中生成的,是以輸出的結果是不可定制的。
對于我來說這個工具真的很有用,并且它已經榮幸地添加在我的.bashrc檔案中。你對這個項目有什麼想法?它對你有用麼?它的解釋令你滿意嗎?請讓我知道吧!
請在下面評論為我們提供寶貴意見,喜歡并分享我們以及幫助我們得到傳播。
本文來自雲栖社群合作夥伴“linux中國”,原文釋出日期:2015-08-10