Я использую sh в качестве оболочки для FreeBSD, но я хочу, чтобы у меня была такая подсказка, как та, что дает мне bash в Ubuntu. Кажется, что в реализации shB во FreeBSD отсутствуют две вещи, связанные с escape-символами PS1:
\w
работает, но не расширяется $HOME
до ~
, так что это то, что я уже взломал сам
Я могу использовать PS1 для обновления подсказки на терминале, но, насколько я могу судить, невозможно также использовать переменную PS1 для обновления строки заголовка. ESC
и BEL
не могут установить заголовок так, как можно было бы ожидать, если бы они использовали bash или ksh
Вот мой файл .shrc
update_prompt() {
case "$PWD" in
"$HOME"*)
pretty_pwd="~${PWD#*"${HOME}"}"
;;
"/usr$HOME"*)
pretty_pwd="~${PWD#*"/usr${HOME}"}"
;;
*)
pretty_pwd="$PWD"
;;
esac
case "$TERM" in
xterm*|rxvt*)
PS1="[$USER@\\h $pretty_pwd]\\$ "
;;
*)
;;
esac
printf "\\033]0;[%s@$(hostname -s): %s]\\007" "$USER" "$pretty_pwd"
}
update_prompt
Поэтому, когда я запускаю терминал или захожу в систему через ssh, выдается довольно симпатичная подсказка, которая мне нравится. Но теперь мне нужно, чтобы эта функция запускалась каждый раз, когда выполняется cd, и возвращает состояние выхода 0.
Я собирался использовать псевдоним, который был что-то вроде:
alias cd="cd $1 && update_prompt"
но это было до того, как я понял, что псевдонимы - это не аргументы. Как я могу сделать что-то подобное?