轻松使用“Explain Shell”脚本来理解 Shell 命令
我们在Linux上工作时，每个人都会遇到需要查找shell命令的帮助信息的时候。 尽管内置的帮助像man pages、whatis命令有所助益， 但man pages的输出非常冗长， 除非是个有linux经验的人，不然从大量的man pages中获取帮助信息是非常困难的，而whatis命令的输出很少超过一行， 这对初学者来说是不够的。  在Linux Shell中解释Shell命令 有一些第三方应用程序， 像我们在Linux 用户的命令行速查表提及过的'cheat'命令。cheat是个优秀的应用程序，即使计算机没有联网也能提供shell命令的帮助， 但是它仅限于预先定义好的命令。 Jackson写了一小
命令 shell
60.255.174.185
http://explainshell.com/ 这个网址输出的结果更加炫丽。
ChangLiu [Firefox 39.0|Ubuntu]
2015-08-09T11:54:48.000
114.253.17.170
是的。但是没有这样的 api 可以使用。
linux [Chrome 44.0|Mac 10.10]
2015-08-09T18:32:22.000
119.0.36.219
为什么我的不行啊，我是按照步骤一步一步地走的，当输入explain 'du -h'&nbsp;&nbsp;终端没有给出任何提示，求大神帮帮忙！qq1522387839
来自贵州贵阳的 Microsoft Edge 12.10240|Windows 10 用户
2015-08-15T02:06:09.000
60.255.174.37
“ LCTT译注：你也可以直接使用命令source~/.bashrc 来让改变生效 ”在这句话中，应该把空格加上，为 source ~/.bashrc
ChangLiu [Firefox 40.0|Ubuntu]
2015-08-15T09:51:34.000
114.253.23.223
哦哦是的，笔误。马上修改。
linux [Chrome 44.0|Mac 10.10]
2015-08-15T11:39:02.000
114.253.23.223
你可以看到，这个函数是修改过的，原来的-Gs 参数是有问题的，小编测试过，所以采纳了修改后版本。也许你的 curl 版本/SSL 版本不同会导致一些问题？你试试换回 -Gs 参数？
linux [Chrome 44.0|Mac 10.10]
2015-08-15T11:40:43.000
119.0.32.235
多谢多谢回复，其实是我从别的地方copy的代码，里面确实有-Gs参数, 这是有问题的，你这篇文章里面的代码是正确的，但我挽回-G时，正如你所说，出现了ssl问题，提示curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).我在网上找了找，始终没有找到方法，man curl里面说 curl(35) ssl connect error,the SSL handshaking failed,我用的centos 7,curl的version是curl 7.29.0 (x86_64-redhat-linux-gnu)，作为一个新手，遇到这种情况我实现无力解决，我只是想在通过这个方法更好地学习linux shell，望回
来自贵州贵阳的 Microsoft Edge 12.10240|Windows 10 用户
2015-08-15T23:30:05.000
61.148.242.30
以我看来，不是 curl 的问题，应该是提供 API 的网站， 更换了和之前（如这篇文章最初写的时候）不同的加密算法，所以，响应更换参数即可。
linux [Chrome 44.0|Mac 10.10]
2015-08-16T09:17:27.000
49.87.168.40
收藏了
dadudeng [Opera 10.5|Android 4.1]
2015-08-21T15:19:13.000
115.205.129.145
curl -G --ciphers ecdhe_ecdsa_aes_128_sha &quot;https://www.mankier.com/api/explain/?cols=&quot;$(tput cols) --data-urlencode &quot;q=$cmd&quot;<br />
ecdhe_ecdsa_aes_128_sha 改成 ECDHE-ECDSA-AES128-SHA 才是正确的
rsdhlz [Chrome 44.0|Windows 10]
2015-09-04T23:22:26.000
我们在Linux上工作时，每个人都会遇到需要查找shell命令的帮助信息的时候。 尽管内置的帮助像man pages、whatis命令有所助益， 但man pages的输出非常冗长， 除非是个有linux经验的人，不然从大量的man pages中获取帮助信息是非常困难的，而whatis命令的输出很少超过一行， 这对初学者来说是不够的。  在Linux Shell中解释Shell命令 有一些第三方应用程序， 像我们在Linux 用户的命令行速查表提及过的'cheat'命令。cheat是个优秀的应用程序，即使计算机没有联网也能提供shell命令的帮助， 但是它仅限于预先定义好的命令。 Jackson写了一小
我们在Linux上工作时，每个人都会遇到需要查找shell命令的帮助信息的时候。 尽管内置的帮助像man pages、whatis命令有所助益， 但man pages的输出非常冗长， 除非是个有linux经验的人，不然从大量的man pages中获取帮助信息是非常困难的，而whatis命令的输出很少超过一行， 这对初学者来说是不够的。


![Explain Shell Commands in Linux Shell](/data/attachment/album/201508/08/225304ov78vvv47yz776zg.jpg)


*在Linux Shell中解释Shell命令*


有一些第三方应用程序， 像我们在[Linux 用户的命令行速查表](http://www.tecmint.com/cheat-command-line-cheat-sheet-for-linux-users/)提及过的'cheat'命令。cheat是个优秀的应用程序，即使计算机没有联网也能提供shell命令的帮助， 但是它仅限于预先定义好的命令。


Jackson写了一小段代码，它能非常有效地在bash shell里面解释shell命令，可能最美之处就是你不需要安装第三方包了。他把包含这段代码的的文件命名为“explain.sh”。


#### explain.sh工具的特性


* 易嵌入代码。
* 不需要安装第三方工具。
* 在解释过程中输出恰到好处的信息。
* 需要网络连接才能工作。
* 纯命令行工具。
* 可以解释bash shell里面的大部分shell命令。
* 无需使用root账户。


**先决条件**


唯一的条件就是'curl'包了。 在如今大多数Linux发行版里面已经预安装了curl包， 如果没有你可以按照下面的命令来安装。



```
# apt-get install curl  [On Debian systems]
# yum install curl      [On CentOS systems]

```

### 在Linux上安装explain.sh工具


我们要将下面这段代码插入'~/.bashrc'文件（LCTT译注: 若没有该文件可以自己新建一个）中。我们要为每个用户以及对应的'.bashrc'文件插入这段代码，但是建议你不要加在root用户下。


我们注意到.bashrc文件的第一行代码以（#）开始， 这个是可选的并且只是为了区分余下的代码。


#explain.sh 标记代码的开始， 我们将代码插入.bashrc文件的底部。（备注：原代码有误，处理 https 时需要指定加密套件，据微信网友“高小树”同学的改进，原来的`-Gs`应该修改为`-G --ciphers ecdhe_ecdsa_aes_128_sha`。谢谢“高小树”同学。）



```
# explain.sh begins
explain () {
  if [ "$#" -eq 0 ]; then
    while read  -p "Command: " cmd; do
      curl -G --ciphers ecdhe_ecdsa_aes_128_sha "https://www.mankier.com/api/explain/?cols="$(tput cols) --data-urlencode "q=$cmd"
    done
    echo "Bye!"
  elif [ "$#" -eq 1 ]; then
    curl -G --ciphers ecdhe_ecdsa_aes_128_sha "https://www.mankier.com/api/explain/?cols="$(tput cols) --data-urlencode "q=$1"
  else
    echo "Usage"
    echo "explain                  interactive mode."
    echo "explain 'cmd -o | ...'   one quoted command to explain it."
  fi
}

```

### explain.sh工具的使用


在插入代码并保存之后，你必须退出当前的会话然后重新登录来使改变生效（LCTT译注：你也可以直接使用命令`source ~/.bashrc` 来让改变生效）。每件事情都是交由‘curl’命令处理， 它负责将需要解释的命令以及命令选项传送给mankier服务，然后将必要的信息打印到Linux命令行。不必说的就是使用这个工具你总是需要连接网络。


让我们用explain.sh脚本测试几个笔者不懂的命令例子。


**1.我忘了‘du -h’是干嘛用的， 我只需要这样做:**



```
$ explain 'du -h'

```

![Get Help on du Command](/data/attachment/album/201508/08/225305j6l3bs8m3smff83s.png)


*获得du命令的帮助*


**2.如果你忘了'tar -zxvf'的作用，你可以简单地如此做:**



```
$ explain 'tar -zxvf'

```

![Tar Command Help](/data/attachment/album/201508/08/225307vd5rd48dpko4pizi.png)


*Tar命令帮助*


**3.我的一个朋友经常对'whatis'以及'whereis'命令的使用感到困惑，所以我建议他：**


在终端简单的地敲下explain命令进入交互模式。



```
$ explain

```

然后一个接着一个地输入命令，就能在一个窗口看到他们各自的作用：



```
Command: whatis
Command: whereis

```

![Whatis Whereis Commands Help](/data/attachment/album/201508/08/225309xask5plqv6vm1mnl.png)


*Whatis/Whereis命令的帮助*


你只需要使用“Ctrl+c”就能退出交互模式。


**4. 你可以通过管道来请求解释更多的命令。**



```
$ explain 'ls -l | grep -i Desktop'

```

![Get Help on Multiple Commands](/data/attachment/album/201508/08/225311t9lb1w62hl9x9jzl.png)


*获取多条命令的帮助*


同样地，你可以请求你的shell来解释任何shell命令。 前提是你需要一个可用的网络。输出的信息是基于需要解释的命令，从服务器中生成的，因此输出的结果是不可定制的。


对于我来说这个工具真的很有用，并且它已经荣幸地添加在我的.bashrc文件中。你对这个项目有什么想法？它对你有用么？它的解释令你满意吗？请让我知道吧！


请在下面评论为我们提供宝贵意见，喜欢并分享我们以及帮助我们得到传播。




---


via: <http://www.tecmint.com/explain-shell-commands-in-the-linux-shell/>


作者：[Avishek Kumar](http://www.tecmint.com/author/avishek/) 译者：[dingdongnigetou](https://github.com/dingdongnigetou) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出

