日記とか、工作記録とか

自分に書けることを何でも書いてゆきます。作った物、買ったもの、コンピュータ系の話題が多くなるかもしれません。

Raspberry pi 3 + thefuck

fuck

fuckコマンドというのをご存じでしょうか。Linuxには有用なパッケージが多数公開されていますが、中には明らかにジョーク目的で作られたにもかかわらず意外にも有用だったりするものもあるのです。というわけでfuckコマンドを紹介します。

github.com

何これ?

fuckコマンドは、コマンドの打ち間違いを自動的に修正してくれるコマンドです。例えば、lsコマンドを実行しようとしてslと打鍵してしまうことがあります。「コマンドが見つかりません」エラーが出力されたらすかさず"fuck!"と叫びながらfuckコマンドを実行しましょう(注:叫ぶのは必須ではないです)(あと、余談ですがLinux界隈にはslコマンドというジョークコマンドも実在します)。

pi@pi3:~ $ sl
-bash: sl: コマンドが見つかりません
pi@pi3:~ $ fuck
ls [enter/↑/↓/ctrl+c]
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos  python_games  shogi
pi@pi3:~ $

すると、fuckコマンドは直前の入力ミスを類推して、「よしよし、おまえが実行したかったのはlsだろう?」ということで修正候補を示してくれます。あとはEnterするだけです。

また、よくあるイライラであるapt-get upgradeコマンド。piユーザでは実行できないのでsudoを頭につける必要がありますが、これを良く忘れます。そんなときも……

pi@pi3:~ $ apt-get upgrade
E: ロックファイル /var/lib/dpkg/lock をオープンできません - open (13: 許可がありません)
E: 管理用ディレクトリ (/var/lib/dpkg/) をロックできません。root 権限で実行していますか?
pi@pi3:~ $ fuck
sudo apt-get upgrade [enter/↑/↓/ctrl+c]

fuckと入力すればあとは考えてくれます。賢いです。仕事では使えませんが(使わないことをおすすめしますが)、自宅の趣味の環境なら便利に使えます。インストール方法を紹介します。

thefuckのインストール

sudo pip install thefuck ... のまえに前提パッケージをインストール

開発元のサイトでは、pip install thefuckでインストールできるよ、とあるのですが、Raspberry pi 3ではそれだけだとインストールエラーになります。python-pip、python-dev、thefuckの順番でインストールしてゆきましょう。まず、python-pipはapt-getコマンドでインストールです。

pi@pi3:~ $ sudo apt-get install python-pip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
python-pip はすでに最新版です。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libasn1-8-heimdal libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal
  libhx509-5-heimdal libkrb5-26-heimdal libroken18-heimdal libwind0-heimdal
これを削除するには 'apt-get autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。
pi@pi3:~ $ sudo apt-get install python-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libasn1-8-heimdal libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal
  libhx509-5-heimdal libkrb5-26-heimdal libroken18-heimdal libwind0-heimdal
これを削除するには 'apt-get autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libpython-dev libpython2.7-dev python2.7-dev
以下のパッケージが新たにインストールされます:
  libpython-dev libpython2.7-dev python-dev python2.7-dev
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 2 個。
18.2 MB のアーカイブを取得する必要があります。
この操作後に追加で 25.7 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libpython2.7-dev armhf 2.7.9-2 [17.9 MB]
取得:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main python-dev armhf 2.7.9-1 [1,188 B]
取得:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main libpython-dev armhf 2.7.9-1 [19.6 kB]
取得:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main python2.7-dev armhf 2.7.9-2 [281 kB]
18.2 MB を 9秒 で取得しました (1,884 kB/s)
以前に未選択のパッケージ libpython2.7-dev:armhf を選択しています。
(データベースを読み込んでいます ... 現在 127602 個のファイルとディレクトリがインストールされています。)
.../libpython2.7-dev_2.7.9-2_armhf.deb を展開する準備をしています ...
libpython2.7-dev:armhf (2.7.9-2) を展開しています...
以前に未選択のパッケージ libpython-dev:armhf を選択しています。
.../libpython-dev_2.7.9-1_armhf.deb を展開する準備をしています ...
libpython-dev:armhf (2.7.9-1) を展開しています...
以前に未選択のパッケージ python2.7-dev を選択しています。
.../python2.7-dev_2.7.9-2_armhf.deb を展開する準備をしています ...
python2.7-dev (2.7.9-2) を展開しています...
以前に未選択のパッケージ python-dev を選択しています。
.../python-dev_2.7.9-1_armhf.deb を展開する準備をしています ...
python-dev (2.7.9-1) を展開しています...
man-db (2.7.0.2-5) のトリガを処理しています ...
libpython2.7-dev:armhf (2.7.9-2) を設定しています ...
libpython-dev:armhf (2.7.9-1) を設定しています ...
python2.7-dev (2.7.9-2) を設定しています ...
python-dev (2.7.9-1) を設定しています ...
pi@pi3:~ $

そのあと、psutilとthefuckはpipコマンドでインストール。

pi@pi3:~ $ sudo pip install psutil
Collecting psutil
  Using cached psutil-4.1.0.tar.gz
Building wheels for collected packages: psutil
  Running setup.py bdist_wheel for psutil ... done
  Stored in directory: /root/.cache/pip/wheels/28/46/4d/aaf6794133b80d7203b0a1d934febf4f59d0c6516e46fbafcd
Successfully built psutil
Installing collected packages: psutil
Successfully installed psutil-4.1.0
pi@pi3:~ $ sudo pip install thefuck
Collecting thefuck
  Using cached thefuck-3.9-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): psutil in /usr/local/lib/python2.7/dist-packages (from thefuck)
Requirement already satisfied (use --upgrade to upgrade): decorator in /usr/local/lib/python2.7/dist-packages (from thefuck)
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from thefuck)
Requirement already satisfied (use --upgrade to upgrade): pathlib in /usr/local/lib/python2.7/dist-packages (from thefuck)
Requirement already satisfied (use --upgrade to upgrade): colorama in /usr/lib/python2.7/dist-packages (from thefuck)
Installing collected packages: thefuck
Successfully installed thefuck-3.9
pi@pi3:~ $

設定

.bashrcの末尾にキーワードを追加しておきます。これで準備OKですが、初回は.bashrcを手動で読み込みましょう。これで使えます。

pi@pi3:~ $ tail ~/.bashrc
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

eval $(thefuck --alias)

pi@pi3:~ $
pi@pi3:~ $ . ~/.bashrc

では皆様、正しいfuckライフを。