UNIX コマンドのオプションの意味を一瞬で調べる方法 (explainshell.com の紹介)

# はじめに

UNIX コマンドのオプション (特にショートオプション) の意味がわからず、調べたい場合はよくあると思います。例えば

- macOS で Homebrew をインストールする際の curl コマンドのオプション `-fsSL` ってなんだろう？
  - `ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"`
- tar コマンドで圧縮したり解凍したりする場合に使うオプションの `-zcvf`, `-zxvf` の意味はなんだろう？
- find コマンドで -exec オプションを使う場合、例えば `find . -type f -exec echo {} +` の `{}` とか `+` ってなんだろう？

という場合です。

このとき、通常は man コマンドや各コマンドの --help オプションを使うと思います。しかし、辞書を引くようにオプションをひとつひとつ調べるのは手間がかかります。今回はその手間を解消してくれる [explainshell.com](https://explainshell.com/) という Web サービスを紹介します 🙌

# explainshell.com

[explainshell.com](https://explainshell.com/) はコマンドを入力すると、関連する man ページの情報をもとにそのコマンドをパースして説明を表示してくれる Web サービスです。

## 例

> macOS で Homebrew をインストールする際の curl コマンドのオプション `-fsSL` ってなんだろう？

`curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install` を入力すると以下のように表示されます。

[explainshell.com - curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install](https://explainshell.com/explain?cmd=curl+-fsSL+https%3A%2F%2Fraw.github.com%2FHomebrew%2Fhomebrew%2Fgo%2Finstall)
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/6f82dde9-2614-8d19-8146-471511d8ab43.png">

man ページの説明を視覚的にわかりやすく表示してくれます。`-s` は　`--silent`、`-S` は `--show-error` の略なんですね。

> tar コマンドで圧縮したり解凍したりする場合に使うオプションの `-zcvf`, `-zxvf` の意味はなんだろう？

2 種類の tar コマンドの例は以下です。

[explainshell.com - tar -zcvf sample.tar.gz ./sample](https://explainshell.com/explain?cmd=tar+-zcvf+sample.tar.gz+.%2Fsample)
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/416db343-a4a1-58fa-637b-34519a43cfbf.png">
[explainshell.com - tar -zxvf sample.tar.gz](https://explainshell.com/explain?cmd=tar+-zxvf+sample.tar.gz)
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/cfaaf1f0-da61-c5f7-60e5-b59b27a7fe75.png">

`-c` は `--create`、`-x` は `--extract` の略なんですね。

> find コマンドで -exec オプションを使う場合、例えば `find . -type f -exec echo {} +` の `{}` とか `+` ってなんだろう？

[explainshell.com - find . -type f -exec echo {} +](https://explainshell.com/explain?cmd=find+.+-type+f+-exec+echo+%7B%7D+%2B)
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/ebd03dcc-3a04-4875-1404-70c569ebde57.png">

オプションのみならず、`-exec command {} +` の意味もすぐに分かりますね。

他にも `:(){ :|:& };:` など一見するとわけがわからないコマンドもパースして説明してくれます。

[explainshell.com - :(){ :|:& };:](https://explainshell.com/explain?cmd=%3A%28%29%7B%20%3A%7C%3A%26%20%7D%3B%3A)

# 注意点

このサービスは [Ubuntu Manpage](http://manpages.ubuntu.com/) の情報を元にしてます[^1]。そのため、この Ubuntu Manpage に記載されていない情報は取得できません。具体的には以下の点に注意です。おとなしく man コマンドを使用しましょう。

## ディストリビューションでの差異

ディストリビューションの異なる Ubuntu と macOS ではコマンドで使用できるオプションが異なる場合があります。例えば macOS で date コマンドを使用する場合に `-v` オプション[^2] が使えますが、explainshell.com では説明が表示されません。

```
$ sw_vers
ProductName:	macOS
ProductVersion:	12.0.1
BuildVersion:	21A559

$ date -v-1d
2022年 2月19日 土曜日 21時04分23秒 JST
```

[explainshell.com - date -v-1d](https://explainshell.com/explain?cmd=date+-v-1d)
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/277c9bbc-2919-2e6f-f1f8-1630d3e24e72.png">

## 新しいコマンド

git restore は　2019/08/16 にリリースされた Git バージョンで登場したコマンドです。このように新しいコマンドは Ubuntu Manpage に記載されておらず、explainshell.com では説明が表示されません。

[explainshell.com - git restore -p -s 42b9adba app/models/user.rb](https://explainshell.com/explain?cmd=git+restore+-p+-s+42b9adba+app%2Fmodels%2Fuser.rb)
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/7f689867-e115-8c64-5935-811b2368c50d.png">

# まとめ

[explainshell.com](https://explainshell.com/) を利用すると、コマンドをパースしてわかりやすい UI で説明してくれます。オプションを多用したコマンドでひとつひとつのオプションの意味や詳細を調べる際に非常に重宝します。man コマンドと併用して、ぜひ使ってみてください。

# 関連

- [idank/explainshell: match command-line arguments to their help text](https://github.com/idank/explainshell)

[^1]: コマンドの説明を表示するページの下部に [Ubuntu Manpage](http://manpages.ubuntu.com/) へのリンクが記載されている。
[^2]: 参考: [Macのdateコマンドで時間調整するやり方 - Qiita](https://qiita.com/hid_tgc/items/a82e00112a3683ede528)