読者です 読者をやめる 読者になる 読者になる

たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

世界一わかりやすい絶対パス

シェルスクリプト bash

世界一は盛り過ぎた

みなさんcdx使ってますか。ぼくは使ってます。

xztaityozx.hatenablog.com

パスって見づらい

Linux上で作業をしていてたまに思うことがありません?僕は思います。
例えば
no1path1
こういうの

これってまだ見やすい方ですけど、長くなってくると意味わかんなくなるよね
それに同じ色だからどこが/なのか分かりにくいし正直長いパスでも後ろいくつかでわかるし
no1path2

お得意のシェルスクリプト

こういうのってcdxのときみたくggったら出てきそうなんですけど・・・
自分で作ればシェル芸人パワー上がるしいいよね

まずはパスの一番最後の要素 つまり

/home/taityo/testdir/dir
                     ↑これとか
/home/taityo/testdir/item.txt
                     ↑これ

これに対して色を付けてやります。
こいつは目的の場所、もしくは目的のファイルであるので目立つ方がいいですね。

#!/bin/bash

path=$1

bpath=${path##*/} #最後尾
fpath=${path%/*}  #その前

out_path=""

bpath="\e[1;33m$bpath\e[0;39m"

out_path="$fpath/$bpath"
echo -e  $out_path

\e[1;33m$fpath\e[0;39mは端末の出力に色を付けるものです。この場合だと黄色の太文字になりますね。echo 色付けとかでggるとでてきまする。
本当はsedとかawkとか使って一撃でやりたかったんですけど・・・
出力はこんなかんじ
no1path3
いいねいいね。

次は最後の要素から上二つまでのディレクトリに別の色をつけます。まぁ同じようにやってもいいんですが ダセー ので配列に展開してしまいましょう

#!/bin/bash

path=$1
arr=(`echo $path|tr -s '/' '  '`) #配列に展開
path_range=${#arr[@]}#要素をカウント

out_path=""

bpath="\e[1;33m${arr[`echo $path_range - 1 | bc`]}\e[0;39m"#最後の要素
bbpath="\e[1;36m${arr[`echo $path_range - 3|bc`]}\e[0;39m/\e[1;36m${arr[`echo $path_range - 2|bc`]}\e[0;39m"
echo -e $bbpath/$bpath

こっちのがいいですね~
ちょっとインデックス計算のところが変なことになってますが・・・
bcコマンドは文字列を計算式として計算してくれる(日本語が下手)コマンドです
exprより使い勝手がいいのでよく使います。

出力は
no1path4

今度は/home/から下3つまでの要素を省略しましょう。
パスが長くなるとターミナルを占領してしまって目がおかしくなるのでね
no1path5

省略する場合パスの要素が6個以上必要ですね~。

#!/bin/bash

path=$1
arr=(`echo $path|tr -s '/' '  '`)
path_range=${#arr[@]}

if [ $path_range -le 2 ]; then #パスが短かった時
    echo -e "/${arr[0]}/\e[1;33m${arr[1]}\e[0;39m"
    exit;
fi

out_path=""

bpath="\e[1;33m${arr[`echo $path_range - 1 | bc`]}\e[0;39m"
bbpath="\e[1;36m${arr[`echo $path_range - 3|bc`]}\e[0;39m/\e[1;36m${arr[`echo $path_range - 2|bc`]}\e[0;39m"
if [ $path_range -ge 6 ]; then
        bbpath="home\e[0;39m/.../$bbpath"
else
        path_range=`echo $path_range - 4|bc`
        while [ $path_range -ge 0 ]; do
                bbpath="${arr[$path_range]}/$bbpath"
                path_range=`echo $path_range - 1|bc`
        done
fi
echo -e /$bbpath/$bpath

こんなかんじになるよ
no1path6
例が悪いから良くなった感があんまないな・・・

で?

これどこでつかうんだ?

一応これを~/.bashrcとかに書いておけばパスを呼び出すときとかに通してやれば綺麗になりますよ!
no1path7

快適な パスライフ を!