Posted at

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


ぼやき

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