Прежде всего, вы можете просто заменить \ w
на \ W
. Таким образом, печатается только имя текущего каталога, а не весь его путь:
terdon@oregano:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name $ PS1="\u@\h:\W \$ "
terdon@oregano:my_actual_directory_with_another_long_name $
Этого может быть недостаточно, если само имя каталога слишком длинное. В этом случае вы можете использовать для этого переменную PROMPT_COMMAND
. Это специальная переменная bash, значение которой выполняется как команда перед отображением каждого приглашения. Итак, если вы установите для этого функцию, которая устанавливает желаемое приглашение на основе длины пути к вашему текущему каталогу, вы можете получить желаемый эффект. Например, добавьте эти строки в свой ~ / .bashrc
:
get_PS1(){
limit=${1:-20}
if [[ "${#PWD}" -gt "$limit" ]]; then
## Take the first 5 characters of the path
left="${PWD:0:5}"
## ${#PWD} is the length of $PWD. Get the last $limit
## characters of $PWD.
right="${PWD:$((${#PWD}-$limit)):${#PWD}}"
PS1="\[\033[01;33m\]\u@\h\[\033[01;34m\] ${left}...${right} \$\[\033[00m\] "
else
PS1="\[\033[01;33m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] "
fi
}
PROMPT_COMMAND=get_PS1
Эффект выглядит следующим образом:
terdon@oregano ~ $ cd /home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name
terdon@oregano /home...th_another_long_name $
Ключевое слово source
, доступное в bash
, не является частью стандарта Posix. Вместо этого вы можете использовать
. myVenv/bin/activate
Вы можете использовать тот же синтаксис с .
в bash
, который вы используете в своей системе Linux.
Вы используете оболочку Forsyth PD Korn, обычную оболочку входа в OpenBSD. В оболочке PD Korn нет команды source
. Встроенная команда source
-доступна только в некоторых оболочках. Вам нужна команда .
.
В качестве альтернативы вы можете просто запустить новую оболочку bash и загрузить ее оттуда:
ksh$ bash
bash$ source myVenv/bin/activate
(myVenv) bash$ python...
В качестве бонуса это дает вам простой способ деактивировать venv и вернуться в исходную среду :просто exit
из оболочки bash, и вы вернетесь в ksh!