なんでだろうと思ったら、エラーメッセージが zsh だった。サクッと解決できたのでその記録です。
参考:
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
$ '
host@user [日付] [時間]
[ディレクトリパス]
[コマンド入力]
となっています。
256色指定できるのですが、それぞれの色を確認するには以下を利用しました。
for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo