質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • bash

    784questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • zsh

    100questions

    zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

tacとtail -rとsort -rって何が違うんですか?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 763

Riliumph

score 7

最近、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

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

sort -rはbashビルトインではないです。外部コマンドです。

historyの出力は、先頭に右揃えの番号が付いているので、このケースではsort -rで良いと思います。
単に、「テキストを逆順にしたい」という思いで考えると、tacになるのでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/21 01:26

    > sort -rはbashビルトインではないです。外部コマンドです。
    あれ!?ホントですね……すみません。
    何と見間違えたんでしょう……

    >「テキストを逆順にしたい」という思いで考えると、tac
    比較演算ができるモノ(historyの番号など)があれば、sortでも大丈夫。
    そうでなければ、tac or tailということですね

    キャンセル

  • 2017/02/21 02:05

    横道にそれますが、このコードは、tacがあるかとか気にしている割に、HISTTIMEFORMATが指定されているケースは想定していないようですね。

    キャンセル

  • 2017/03/06 01:54

    納得がいってしまい、放置しておりました。すいません。

    >HISTTIMEFORMATが指定されているケース
    history部分を、HISTTIMEFORMAT= \historyにするということですかね。
    横道と仰られていてその通りではありますが、私にはありがたいご指摘です。

    キャンセル

同じタグがついた質問を見る

  • bash

    784questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • zsh

    100questions

    zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。