@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Dockerfileでbashの新しいものを用意する

tl;dr

FROM amazon/aws-cli:latest as build

RUN yum update -y \
        && yum install -y make gcc tar gzip

# bash 5.2 for zoxide <Space>+<Tab>
ENV VER_bash=5.2
RUN yum install -y ncurses-devel
RUN curl -O http://ftp.gnu.org/gnu/bash/bash-${VER_bash}.tar.gz \
        && tar xf bash-${VER_bash}.tar.gz \
        && cd bash-${VER_bash} \
        && ./configure --with-curses \
        && make \
        && make install \
        && rm -rf bash-${VER_bash}.tar.gz bash-${VER_bash}

FROM amazon/aws-cli:latest

COPY --from=build /usr/local/bin/bash /usr/local/bin/bash
ENTRYPOINT /usr/local/bin/bash

背景など

autojumpやzのような、ディレクトリ移動履歴をもとによしなに移動できるzoxideを使おうと設定していた。

github.com

<space>+<tab>というショートカットキーは bash4.4以降が必要ということがわかり、最新のbashでも入れてみるかとビルドレイヤーでビルドしてバイナリだけ持ってきてパスに置くことにした。

あと、configureスクリプト--with-cursesオプションをつけているのは、長いコマンドを入力すると横スクロールされて先頭が消えるのを対処するため。

これは readline のhorizontal-scrollをoffにすれば解決する(~/.inputrcset horizontal-scroll offを書く)はずだったが、 cursesを入れてないと上下方向のカーソル移動に対応できずfall backとして横スクロールが強制されていたもよう。

bashを5に上げた影響かと思ってなかなか探すのに苦労したが、最終的にこのスレッドを見て解決した。

lists.gnu.org

ついでに、 readlineのドキュメントを見たら 補完時に大文字小文字を無視してくれるオプションを見つけたのが収穫。zshにしないといけないと思い込んでました

set completion-ignore-case on