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

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

新規登録して質問してみよう
ただいま回答率
85.50%
bash

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

zsh

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

Q&A

解決済

1回答

2461閲覧

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

Riliumph

総合スコア13

bash

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

zsh

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

0グッド

0クリップ

投稿2017/02/20 15:16

編集2017/02/20 16:30

最近、Bashを使う機会がありまして、そこでふと疑問に思ったので質問させていただきます。

bashにpecoと呼ばれるフィルタリングツールを導入して、bash_historyから入力したコマンドを表示するスクリプトというか関数を作ろうとしました。
ググるとかなりの数がbashやzshやfishでヒットするのですが、主にこんなコードです。

bash

1peoc_history(){ 2 local reverse_order 3 if which tac &> /dev/null; then 4 reverse_order='tac' 5 else 6 reverse_order='tail -r' 7 fi 8 local CMD=$(\history \ 9 | $reverse_order \ 10 | sed -re "s/^\s+[0-9]+\s+//" \ 11 | awk '!dictionaty[$0]++' \ 12 | peco --query "${READLINE_LINE}") 13 READLINE_LINE="${CMD}" # Input to terminal's readline 14 READLINE_POINT=${#CMD} # Set cursor 15}

どうやら、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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

投稿2017/02/20 15:44

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Riliumph

2017/02/20 16:26

> sort -rはbashビルトインではないです。外部コマンドです。 あれ!?ホントですね……すみません。 何と見間違えたんでしょう…… >「テキストを逆順にしたい」という思いで考えると、tac 比較演算ができるモノ(historyの番号など)があれば、sortでも大丈夫。 そうでなければ、tac or tailということですね
otn

2017/02/20 17:05

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

2017/03/05 16:54

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問