コマンドラインで作業中にコマンドやプログラム言語の使い方がわからなくなって検索した結果 Stack Overflow の回答にたどり着く事はよくあると思います。
その結果をコマンドラインから直接見ることを可能にしてくれる
howdoi
とhow2
という2つのコマンドの紹介。
howdoi
Python製で、 インストールはpipで1
$ pip install howdoi
使い方はtar.gz
の展開方法がわからない、と言った時には
$ howdoi tar.gz
tar xzf file.tar.gz
みたいな感じで適当に知りたい物を与えるだけ。
stackoverflow.comにある質問の中から Google検索で最初に見つかった質問の 一番最初の解答を取ってきます。
site:stackoverflow.com tar.gz
の結果を見ています。
Googleの検索結果で取ってくるので、
通常のGoogle検索感覚で言葉を加えて検索精度を高めることが出来ます。
(howdoi extract tar.gz
など。ただ、この場合はextract
を与えないほうが
上の一番シンプルな良い感じの解答が出てきました。)
オプションを与えないとその解答の中にコードがあった場合には
コード部分だけを(pre
or code
タグ)取ってきます。
解答全体を見たいときは
$ howdoi -a tar.gz
tar xzf file.tar.gz
The letters are:
x - extract z - gunzip the input f - Read from a file, not stdin
Answer from http://stackoverflow.com/questions/651018/opening-a-tar-gz-file-with-a-single-command
な感じで-a
オプション。参照元のURLも表示してくれます。
複数の解答を見たい場合は-n 2
の様に-n
に数を渡します。
(2番めの解答は別の質問ページの最初の解答になります。)
また、一つ見てよくわからないから次、みたいにしたい場合には
-p 2
の様に-p
に数を渡すとn番目だけを見ることが出来ます。
デフォルトではstackoverflow.comから解答を探しますが、 http://unix.stackexchange.com/ など他のstackexchangeシリーズなどから解答を探したい場合は
$ HOWDOI_URL=unix.stackexchange.com howdoi -a tar.gz
you can also use tar -zxvf <tar filename> <file you want to extract>
-x: instructs tar to extract files.
-f: specifies filename / tarball name.
-v: Verbose (show progress while extracting files).
-z: filter archive through gzip, use to decompress .gz files.
Answer from http://unix.stackexchange.com/questions/61461/how-to-extract-specific-files-from-tar-gz
の様に、環境変数HOWDOI_URLにURLの一部を指定します。
使えるのはStack Exchangeのサイト(All Sites - Stack Exchange)です。
ちなみに、最近解説された日本語サイト スタック・オーバーフロー も指定可能ですが、 URLがhttp://ja.stackoverflow.com/なので デフォルトの設定でも検索にかかれば出てきます。
日本語も使えるので
$ howdoi 展開 tar.gz
とすると
linux - IRIX 6.x で使用されていたxファイルを実行したい - スタック・オーバーフロー
のページが出てきます。
(ただしtar.gz
の展開、的な簡単な質問は最早こちらには出てないので
tar.gz
を含む別の話が出てきています。)
もちろん、
$ HOWDOI_URL=ja.stackoverflow.com howdoi -a tar.gz
の様にサイトを直接指定して絞り込むことも可能です。
how2
こちらはJavaScript製のコマンド。
インストールは
$ npm install -g how2
追記: 2018/02/23
現在依存しているdevnullというパッケージがアップデートされずに 問題を起こしているようで、
/usr/local/lib/node_modules/how2/node_modules/devnull/transports/transport.js:59
Transport.prototype.__proto__ = EventEmitter.prototype;
^
TypeError: Cannot read property 'prototype' of undefined
な感じのエラーが出るようになっています。
devnullもhow2の方も作者がアップデートする感じが無いので 有志の人がForkして作ったものが
$ npm install -g how-2
とhow-2という名前で取ってこれる様になっています。
インストールされるコマンド自体はhow2
で、
先にnpm install -g how2
でインストールしてある場合でも
上書きしてhow-2のhow2
をインストールされます。
osx: TypeError: Cannot read property ‘prototype’ of undefined · Issue #79 · santinic/how2
追記ここまで
こちらのコマンドはGitHubへの最初のコミットが今年になっている
比較的新しいものです。
(howdoi
の最初のコミットは2012年。)
使い方はhowdoi
同様知りたい物を適当に聞けば良いだけ。
$ how2 tar.gz
gzip - Pack file with tar.gz from root directory
use the --directory option from man tar :
> -C,- -directory DIR
> change to directory DIR
i.e.:
tar -C /mnt/sdb1/ -czf /mnt/sdb1/old_files/new.tar.gz myfile.csv
Press SPACE for more choices, any other key to quit.
こちらは gzip - Pack file with tar.gz from root directory - Unix & Linux Stack Exchange の解答を持ってきました。
how2
はデフォルトでは
Unix & Linux Stack Exchange (unix.stackexchange.com)
から結果を取ってきます。
オプションで-l
を使って言語を指定すると
Stack Overflow (stackoverflow.com)
から探してくるようになります。
検索の仕方として、-l
を使わないと
site:unix.stackexchange.com tar.gz
と言った検索ワードで探します。
-l
でhow2 -l python read file
みたいに指定すると、
site:stackoverflow.com python read file
と言った感じに、最初の検索ワードのURL部分を変更して-l
で与えたものは
単に検索ワードの一部として渡します。
ただし、-l
を使わなければ
how2 python read file
とpython
という言葉を入れても
site:unix.stackexchange.com python read file
と言う検索ワードになってPythonの情報は上手く得られません。
逆に-l
に渡すものは実はなんでもOKで、-l
さえ使えばstackoverflow
の方を探すようになります。
逆に-l
を使わない場合に
'python', 'javascript', 'ruby', 'perl', 'php', 'c++', 'zsh'
が検索用語の中に入っていると-l
を使いなさいよ、というwarningが出ます。
(ただし、その場合でもunix.stackexchange.comを使って結果は出ます。)
howdoi
の場合と同じ検索方法なはずなのですが、
JavaScriptのAPIのせいなのか、ちょっと違うページのものが出てきています
2。
中でのソートみたいなことは各質問ページ毎での回答について Voteが高い順にしてるくらいしかわからなかったのですが。
取り敢えずそれは置いておいて、
how2
の場合にはURLを指定したりするオプションは今のところはなく、
-l
を使わなければunix.stackexchange.com、
使えばstackoverflow.comから検索します。
ただし、検索したあとの作業でURLをチェックするところがあって、
ここでja.stackoverflow.comみたいなものは弾かれるので、
-l
を使った場合でもja.stackoverflow.comから検索することは出来ません。
ちょっといじると日本語サイトからも持ってこれるようにはなりましたが、 最初の検索結果は良いんですが、 下で書いてあるその後のインタラクティブな結果が文字化けするので もうちょっと工夫が必要。 (ちょっとみれば簡単に解決出来そうなものですが。)
rcmdnk/how2 at other_stackoverflow: stackoverflow from the terminal
上のForkのother_stackoverflowブランチ版で
$ how2 展開 tar.gz
とするとja.stackoverflow.comから一応取ってこれます。
話が横にそれましたが、how2
の優れている点は最初のコマンド結果に書いてあるとおり、
最初の結果を表示語、Spaceを押すと
質問ページタイトル一覧の表示が出てきて、
さらに各質問ページのタイトルを選択すると、
各ページの解答のタイトル一覧が出てきます。(解答のところにある数字はVote数。)
解答のタイトルを選択すれば解答が見られます。
このように一回のコマンドでインタラクティブに複数の解答を見ることが出来ます。
また、howdoi
では各質問ページの一番最初の解答しか見れませんが、
how2
であればおなじ質問ページの別の解答を見ることも可能です。
まとめ
というわけでhowdoi
とhow2
という2つのコマンドを紹介しました。
howdoi
の方はシンプルで、表示もコード部分だけ
の選択的な表示が出来るので簡単な使い方を探す場合には便利だと思います。
(上のtar.gz
の例はまさに完璧な解答を持ってきてくれてます。まあ、たまたまですが。
圧縮したい場合は別ですし。)
how2
の方は新しいということもあり、
インタラクティブに別の解答も見に行けたりもして
ちょっと複雑なことを知りたい時、色々参照したい時にはとても便利です。
これらのツールを使えばまた一歩ターミナルから離れる時間を減らすことが出来ます。
stackoverflow or stackexchange?
ちなみに、上でもstackoverflowという物とstackexchangeという物が出てきてますが、 これらは全て Stack Exchange Inc.がオーナーの Stack Exchangeというウェブサイトネットワーク の元にあります。
元々Stack Overflowというプログラム関係のQ & Aサイトを作って、 それを拡張するためにStack Exchangeというシステムを作って 入りろな分野に分けたQ & Aサイトを作っていった様です。
今でも大元の stackoverflow.com は基本的なプログラム関係の質問があります。
上にも有るようにUnix (Linux)に関しては unix.stackexchange.com という専用のサイトがstackexchange.comのサブドメインにあります。
中には他の独自ドメインを持った serverfault.com や superuser.com と言ったサイトも有ります。
さらに、stackexchangeのサブドメインの中に特別な Area 51 というサイトがあり、この中では 新たなサイトの分野を検討したりしています。
一覧は
また、各サイトには
meta.stackoverflow.com
と言った具合にサイトにmeta.
を付けたサブドメインが存在していて
そこではそれぞれのサイトの仕組みや運用の仕方について話し合う場になっています。
stackoverflow.comにもmeta
以外のサブドメインを持つものがいくつかあって、
英語以外の言語のサイトもこれに辺り、
今のところ
*Stack Overflow en español (スペイン語) *スタック・オーバーフロー (日本語) *Stack Overflow em Português (ポルトガル語) *Stack Overflow на русском (ロシア語)
が有ります。
意外ととフランス語やドイツ語が無いのにロシア語とかがあって、 または中国語とかも無いです。
日本語版は2014年末に公開されましたが その時は否定的な意見も多かった感じ。
とうか2,3ヶ月前位だった気がしてましたがもう1年以上経ってますね、 殆ど見た気がしませんが……
-
READMEにはHomebrewでインストールする方法も載ってるのですが、
$ brew install https://raw.github.com/gleitz/howdoi/master/howdoi.rb ==> Downloading http://pypi.python.org/packages/source/h/howdoi/howdoi-1.1.7.tar.gz Already downloaded: /Library/Caches/Homebrew/howdoi-1.1.7.tar.gz ==> python setup.py install Last 15 lines from /Users/user/Library/Logs/Homebrew/howdoi/01.python: Perhaps your account does not have write access to this directory? If the installation directory is a system-owned directory, you may need to sign in as the administrator or "root" account. If you do not have administrative access to this machine, you may wish to choose a different installation directory, preferably one that is listed in your PYTHONPATH environment variable. For information on other options, you may wish to consult the documentation at: https://pythonhosted.org/setuptools/easy_install.html Please make the appropriate changes for your system and try again. READ THIS: https://git.io/brew-troubleshooting
こんな感じのエラーが出ています。 現在、PythonはHomebrewでインストールしていて
python
/usr/local/binに入っていて 直接取ってきて$ python setup.py install
しようとすると
/usr/local/lib/python2.7/site-packages/
にされる様になっていますが、 ログを見てみると
/usr/lib/python2.7/site-packages/
にインストールしようとしてる模様。 恐らくPATHの設定が伝わってなくて /usr/bin/pythonにあるpythonを使ってインストールしようとしている様です。
HomebrewでのPythonモジュールのインストールは 相変わらず色々と大変そう。。。
-
上の
how2
の結果はHOWDOI_URL=unix.stackexchange.com howdoi -p2 -a tar.gz
で得られます。
逆に
howdoi
の最初の結果はhow2
でも後で示すインタラクティブなモードの中で見れます。 ↩