Amazon Linux 2 のbashでリダイレクト先が補完されなくなった


困ったこと

# test.sh を実行し、標準出力/エラー出力を log/test.log に書き出す
$ sh test.sh >& log/test.log

このとき、log/を打とうとすると、補完されなかった。これまでは出来たのに。。と思って調べると以下の通り。
- Amazon Linux 2 では補完されない
- Amazon Linux (1) では補完される
- RHEL7 では補完される

bash_completion が原因?

  • rpm -qi bash_completion で調べると、Amazon Linux 2にだけ入っている。
  • /usr/share/bash-completion/bash_completion をrenameして再ログインすると、補完された。
  • (が、当然bash-completionをもって機能する補完も使えなくなる)
  • これまでの感じに戻したければこれでOK

より前向きな解決

>&ではなく&>を使おう

$ sh test.sh &> log/test.log

http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
「標準出力と標準エラー出力のリダイレクト」の項
意味は同じだが、&>の方が推奨とされている。
これであればbash-completionが効いたままでもOK

ぼやき

(この辺て困ることでも無いと、使い始めた時点の知識からなかなかアップデートされないのでおじさんたちは注意しよう)