質問: 最近、Bashを使う機会がありまして、そこでふと疑問に思ったので質問させていただきます。 bashにpecoと呼ばれるフィルタリングツールを導入して、bash_historyから入力したコマンドを表示するスクリプトというか関数を作ろうとしました。 ググるとかなりの数がbashやzshやfishでヒットするのですが、主にこんなコードです。 ``` peoc_history(){ local reverse_order if which tac &> /dev/null; then reverse_order='tac' else reverse_order='tail -r' fi local CMD=$(\history \ | $reverse_order \ | sed -re "s/^\s+[0-9]+\s+//" \ | awk '!dictionaty[$0]++' \ | peco --query "${READLINE_LINE}") READLINE_LINE="${CMD}" # Input to terminal's readline READLINE_POINT=${#CMD} # Set cursor } ``` どうやら、tail -rはGNU標準でのtailコマンドには存在しないようで、tacを持ってるか持ってないかを判断した方がいいみたいです。 tacを持ってないLinuxなんかがあればどうするんですかね、という疑問はあるものの **「それだったら、bashにビルトインされているsort -r使った方がよくない? zshとかは知らないけど、bashならとりあえず動くでしょ」** と思います。 ※sortがビルトインだと思ったのは、私の視力が悪かったからです。すいません。 しかし、調べども調べども出てくるのは「tac or tail -r」ばかり。 コマンドの内容を見ても何か問題があるようには思えません。 何か、**「いや、実はtacとtailとsortはこういう違いがあるんだよ」**と知っておられる方がいらっしゃっいましたらご教授願います。 **「いや、なんにも違わないよ。好きなの使えば?」**ということでも構いません。 ※恐れながらも、私が持っていないMac OSでの情報とか頂けたらありがたいです。 ※今はMacはFree BSDなんでしたっけ?あまり知りませんが...... どうぞ、よろしくお願い致します。 【私の使っている環境】 Ubuntu 16.04(x64) Bash 4.3.46
回答: `sort -r`はbashビルトインではないです。外部コマンドです。 `history`の出力は、先頭に右揃えの番号が付いているので、このケースでは`sort -r`で良いと思います。 単に、「テキストを逆順にしたい」という思いで考えると、`tac`になるのでしょう。