Что означает проверка bashrc PS1 [«$ PS1» = «\\ s - \\ v \\\ $»]?

(EE) Не удается установить прослушивающие сокеты - Убедитесь, что X-сервер еще не запущен (EE) fixme: exec: SHELL_execute флаги игнорируются:

Либо Xfvb (или другой X-сервер) уже запущен на дисплее: 1, либо остались некоторые файлы блокировки от предыдущего запуска.

См. ls -l /tmp/.X* и посмотрите свой список процессов ps aux | grep -i xvfb .

Если запущен другой X, вы можете его убить.Или вручную удалите файлы блокировки X1 * . Или выберите другой дисплей Xvfb ( Xvfb: 123 ).

Ваш стартовый скрипт должен убивать X-сервер при выходе. В противном случае вы также можете повторно использовать сеанс Xvfb, если он уже запущен.

FYI У меня есть такой Xvfb / wine скрипт, работающий в производственной среде. Хотя он и не идеален, он всегда запускается без каких-либо проблем с годами через cron. Вот он:

#!/bin/bash

VNC_PORT=29
export DISPLAY=":${VNC_PORT}.0"

/usr/bin/Xvfb :${VNC_PORT} -screen 0 1024x768x8 -fbdir /var/tmp  &
XVFB_PID=$!

# waiting for XServer  established (or failure)
sleep 1

if test "${XVFB_PID}" != "$(jobs -p)" ;then
    echo "error, Xvfb failed"
    exit 1
fi

/usr/bin/wine **your command**
RET=$?
echo "wine returned '$RET'"

# waiting for shutdown all wine stuff completely
sleep 2

kill $XVFB_PID
exit $RET
2
10.08.2017, 13:01
5 ответов

Неудобный способ проверить, является ли PS1значением по умолчанию для bashили оно было настроено пользователем в~/.bashrc(или в любом из файлов /etc/profile, /etc/profile.d/*или ~/.bash_profile. в случае оболочки входа ).

В первом случае PS1будет установлено на уродливое и раздражающее [user@host last_path_elem]$; в последнем случае он останется как есть.

Обратите внимание, что в RedHat /etc/bashrcявно получен из ~/.bashrcпо умолчанию, а ~/.bash_profileустановлен из /etc/skel; не путайте /etc/bashrcс /etc/bash.bashrc, источник которого предшествует ~/.bashrcв некоторых системах (, например. Дебиан).

2
27.01.2020, 21:53

Я полагаю, что сравнение проверяет, является ли оболочка интерактивным сеансом. \s-\v$, так как переменная $PS1 оценивается как bash-5.0$на моей машине. См. различия здесь:

Jonathans-Air:~ lirum$ bash
bash-5.0$ echo "$PS1"
\s-\v\$
bash-5.0$ exit
exit
Jonathans-Air:~ lirum$ echo "$PS1"
\h:\W \u\$
0
27.01.2020, 21:53

\s-\v\$␣— это строка приглашения по умолчанию , которую Bash устанавливает при интерактивном запуске с неустановленным PS1.Он показывает базовое имя процесса оболочки (, обычно bashили sh), версию и знак доллара, например. bash-4.4$. (Или #вместо $при работе от имени пользователя root.)

Идея заключается в том, чтобы установить более полезную подсказку, но не в том случае, если она уже установлена ​​в каком-то другом файле запуска.

Обратная косая черта удваивается в "\\s-\\v\\\$ ", так как в двойных -кавычках строка \xимеет особое значение для некоторых значений x. \\однозначно представляет буквальную обратную косую черту. (Хотя по какой-то причине они не сделали этого на стороне присваивания ).

Использование строк в одинарных кавычках упростило бы чтение обратной косой черты:

[ "$PS1" = '\s-\v\$ ' ] && PS1='[\u@\h \W]\$ '
1
27.01.2020, 21:53

Выполняемая проверка представляет собой сравнение строк =. Он сравнивает значение $PS1 со строкой \s-\v\$, где обратную косую черту необходимо экранировать в строке, чтобы их можно было сравнить с фактическими обратными косыми чертами, а не пытаться экранировать следующий символ.

Синтаксис &&— это часть, которая устанавливает PS1, только если предыдущий тест прошел успешно.

Общая логика здесь, по-видимому, заключается в обновлении PS1 только в том случае, если ранее для него было установлено определенное значение.

1
27.01.2020, 21:53

( Я обдумывал, стоит ли сделать это ответом, так как это такая добыча, но вот...)

Просто теория, но первая форма (e.g.bash-3.2.1$)выглядит как подсказка, которую я часто вижу при входе в систему как пользователь root или под другой учетной записью «не -пользователь». Вторая, доминирующая форма (, например.[joeblow@myhost /tmp]$)больше ориентирован на пользователя -. Так что, возможно, это нужно для обнаружения при переходе от системной учетной записи к учетной записи пользователя... затем и только тогда перейти к более подходящей подсказке. В противном случае предположим, что кто-то захочет сохранить текущую подсказку.

2
27.01.2020, 21:53

Теги

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