エイリアスしていたコマンドが利用できない

なんでだろうと思ったら、エラーメッセージが zsh だった。サクッと解決できたのでその記録です。

参考:

zsh 用の設定ファイルに bash_profile へのリンクを貼る

bashで使ってたファイル zshで使うファイル 備考
~/.bash_profile ~/.zprofile source .bashrc してた場合、それより の記述をコピペする
~/.bashrc ~/.zshrc bash のログインシェルは読まなかったが、 zsh はログインシェルでも読む点に注意
~/.bash_profile ~/.zlogin source .bashrc してた場合にのみ作る。それより の記述をコピペする
~/.bash_logout ~/.zlogout  

.bashrc が絡むあたりでややこしいみたいですが、私の bash_profile はそこまで大変なことをしていないので、 普通にbash_profile.zprofile からリンクを貼る形で解決させました。

ln -sf ~/dotfiles/bash_profile ~/.zprofile

これで今のところ問題なく動いています。

zsh 用の設定と bash 用の設定を分ける

The standard ~/.profile has this in it:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

スクリプトがどのシェルインタープリターで動いているかを判定したいときってありませんか? 私はあります。ポータブルなシェルスクリプトを書きたい、 しかし、互換性の問題などでシェルの種類に依存するコードを書き分けないといけない場合です。

ざっくりとシェルの種類、バージョン、 動作モードを判定するスクリプトを作ってみました: sh-detect-name-ver-mode.sh

if [ -n "${BASH_VERSION-}" ]; then

~~~(中略)~~~

elif [ -n "${ZSH_VERSION-}" ]; then

$ZSH_VERSIONS$BASH_VERSION というシェル変数を利用することで場合分けをすることができるようです。

プロンプトの表示を色付けする

使用できる特殊文字

文字 出力
%n ユーザー名
%m ホスト名
%~ カレントディレクトリ
%T 時間(HH:MM)
%* 時間(HH:MM:SS)
%D 日付(YY-MM-DD)

改行を入れる

文字列中に改行をいれると表示も改行される

PROMPT='%n
%m $ '

表示結果

user_name
host_name $ 

Zshパラメータ利用

例2

PROMPT="%K{082}%F{001}[%n@%m]%f%k"

もう一つは man zshmisc で見れるZshのパラメータを利用した方法。 %K{色番号} で背景色、 %F{色番号} で文字色を指定、 %k で背景色リセット、 %f で文字色リセット出来ます。 こちらのほうがスッキリしていて見やすいので僕はこちらで指定しています。

この辺りを利用して、以下のような設定を .zlogin 記述しました。

# zsh prompt setting
PROMPT='%K{002}%m%k%K{003}@%n%k %D %T
%K{007}%F{000}%~%f%k
$ '
1行目
host@user [日付] [時間]
2行目
[ディレクトリパス]
3行目
[コマンド入力]

となっています。

256色指定できるのですが、それぞれの色を確認するには以下を利用しました。

for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo