2020-05-19
5/19
basherを使ってみた
昨日見つけたbasherがclenvを置き換えられそうだったので、試してみた。
作業環境はUbuntu 18.04.
Install
READMEの通りにやってみる。
$ git clone https://github.com/basherpm/basher.git ~/.basher
$ export PATH="$HOME/.basher/bin:$PATH"
$ eval "$(basher init -)"
basher init usage has changed, please specify the name of your shell as an argument:
eval "$(basher init - bash)" # or zsh, fish, sh etc
For more information, check this PR: https://github.com/basherpm/basher/pull/77
初期化コマンドが変わったらしいので、やり直す。
$ eval "$(basher init - zsh)"
$ basher
Usage: basher <command> [<args>]
Some useful basher commands are:
help Display help for a command
commands List all available basher commands
init Configure the shell environment for basher
See 'basher help <command>' for information on a specific command.
$ basher commands
commands
completions
help
init
install
link
list
outdated
package-path
uninstall
upgrade
使ってみる
まずはシェルスクリプトモジュールをinstallし、includeでシェルに読み込むというのを試す。
# 自作のgcloud-promptをインストール
$ basher install progrhyme/gcloud-prompt
Cloning into '/home/progrhyme/.basher/cellar/packages/progrhyme/gcloud-prompt'...
: # 略
$ basher list
progrhyme/gcloud-prompt
$ include progrhyme/gcloud-prompt gcloud-prompt.sh
$ gcloud_prompt
default|my-project1,asia-northeast1
# kube-ps1をインストール
$ basher install jonmosco/kube-ps1
Cloning into '/home/progrhyme/.basher/cellar/packages/jonmosco/kube-ps1'...
: # 略
$ include jonmosco/kube-ps1 kube-ps1.sh
$ kube_ps1
(%{%F{4}%}⎈ %{%f%}|%{%F{1}%}reagent_experiment%{%f%}:%{%F{6}%}default%{%f%})
$ kubeoff
$ kube_ps1
$
次は実行ファイルを含むリポジトリをinstallしてみる。
$ basher install progrhyme/git-wraps
$ ll ~/.basher/cellar/bin/git-*
lrwxrwxrwx 1 progrhyme progrhyme 77 5月 19 20:55 /home/progrhyme/.basher/cellar/bin/git-branch-clean -> /home/progrhyme/.basher/cellar/package
s/progrhyme/git-wraps/bin/git-branch-clean
lrwxrwxrwx 1 progrhyme progrhyme 70 5月 19 20:55 /home/progrhyme/.basher/cellar/bin/git-pulls -> /home/progrhyme/.basher/cellar/packages/progr
hyme/git-wraps/bin/git-pulls
lrwxrwxrwx 1 progrhyme progrhyme 74 5月 19 20:55 /home/progrhyme/.basher/cellar/bin/git-pulls-all -> /home/progrhyme/.basher/cellar/packages/p
rogrhyme/git-wraps/bin/git-pulls-all
lrwxrwxrwx 1 progrhyme progrhyme 72 5月 19 20:55 /home/progrhyme/.basher/cellar/bin/git-skelton -> /home/progrhyme/.basher/cellar/packages/pro
grhyme/git-wraps/bin/git-skelton
lrwxrwxrwx 1 progrhyme progrhyme 83 5月 19 20:55 /home/progrhyme/.basher/cellar/bin/git-submodule-all-pull -> /home/progrhyme/.basher/cellar/p
ackages/progrhyme/git-wraps/bin/git-submodule-all-pull
lrwxrwxrwx 1 progrhyme progrhyme 81 5月 19 20:55 /home/progrhyme/.basher/cellar/bin/git-submodule-delete -> /home/progrhyme/.basher/cellar/pac
kages/progrhyme/git-wraps/bin/git-submodule-delete
$ basher list
jonmosco/kube-ps1
progrhyme/gcloud-prompt
progrhyme/git-wraps
ふつうに使えそう。
bin/* 以下のものはsymlinkなので、例えば実行ファイルが「同じリポジトリに含まれる lib/foo.sh に依存するシェルスクリプト」だとしても問題なく動くはず。
一応このケースも試しておく:
$ basher install progrhyme/shove
$ ~/.basher/cellar/bin/shove
Run tests by /bin/zsh
-------------------------
Test Summary Report
-------------------
All tests successful.
Files=0, Tests=0, Successes=0, Failures=0
Result: PASS
問題なし。
パッケージリストの管理ができるかどうか
Brewfileとかbundlerのようなことをやりたい。
clenvだと、 Clamfile
っていうので管理できるようにしていた。
どうやらそれそのものの機能はないようだけど、ローカルのディレクトリをパッケージとしてインストールする link
サブコマンドと、 package.sh
に記した依存するパッケージを追加でインストールする、という機能によって、できなくはない、ということがわかった。
$ mkdir test-basher-package
$ cat <<EOS > test-basher-package/package.sh
DEPS=progrhyme/shove:progrhyme/toolbox
EOS
$ basher link test-basher-package progrhyme/test-basher-package
Package 'progrhyme/shove' is already present
Cloning into '/home/progrhyme/.basher/cellar/packages/progrhyme/toolbox'...
: # 略
shoveはさっきインストールしたのでスキップされている。
このテスト用のパッケージをuninstallしても、依存パッケージは残ったまま。
$ basher uninstall progrhyme/test-basher-package
$ basher list
jonmosco/kube-ps1
progrhyme/gcloud-prompt
progrhyme/git-wraps
progrhyme/shove
progrhyme/toolbox
ちなみにこの basher link
で実際に起こることしては ~/.basher/cellar/packages/
にsymlinkされるだけなので、処理としては軽い。
なので、例えば適当なディレクトリに package.sh
を置いて、そこに DEPS で自分が使いたいパッケージのリストを記しておき、一時的にそのディレクトリを basher link
でローカルインストールした後、削除する、ということをすれば、DEPSに記したパッケージリストをインストールできる。
…が、わざわざそんなことをするぐらいなら、パッケージリストを配列にでも入れてforループで処理してしまえば十分だと思った。
(追記)自分ではこんな感じで実装した。
後で、この basher_bundle_install
を実行するだけのコマンド basher-bundle-install
を作った。
Ubuntu Zshでbasherに乗り換えてみた
挙動を確認できたので、clenv -> basherへの移行を進めようかと思って、やってみた。
下のような形で対応できた。
一応他の環境には影響を与えないようにやったけど、他の環境でもすぐに乗り換えてしまおうと思っている。
追記: その後の対応
- 5/22 Ubuntu Bashで乗り換え
- 5/23 Mac Book Airで乗り換え