Эквивалентен «исходному тексту» в OpenBSD?

Прежде всего, вы можете просто заменить \ 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 $ 
5
24.03.2019, 15:44
3 ответа

Ключевое слово source, доступное в bash, не является частью стандарта Posix. Вместо этого вы можете использовать

. myVenv/bin/activate

Вы можете использовать тот же синтаксис с .в bash, который вы используете в своей системе Linux.

10
27.01.2020, 20:31

Вы используете оболочку Forsyth PD Korn, обычную оболочку входа в OpenBSD. В оболочке PD Korn нет команды source. Встроенная команда source-доступна только в некоторых оболочках. Вам нужна команда ..

Дополнительная литература

19
27.01.2020, 20:31

В качестве альтернативы вы можете просто запустить новую оболочку bash и загрузить ее оттуда:

ksh$ bash
bash$ source myVenv/bin/activate
(myVenv) bash$ python...

В качестве бонуса это дает вам простой способ деактивировать venv и вернуться в исходную среду :просто exitиз оболочки bash, и вы вернетесь в ksh!

1
27.01.2020, 20:31

Теги

Похожие вопросы