Линейная упаковка, сломанная, когда PS1 содержит новую строку

Проблема в том, что ваш sudo su ... порождает другую оболочку, и только когда вы выходите из из это делает попытку вашего сценария продолжить.

Предполагая, что ваша конфигурация sudo это позволяет, вы можете сделать это вместо этого:

sudo -iu oradba 'cd ... && chmod ... && chown ... '
sudo -iu orainst '...'

&& можно было бы заменить точкой с запятой, просто так, вы гарантируете что chmod не будет выполняться, если cd не будет успешным, и так далее.

Если ваша конфигурация sudo не позволяет этого, вы можете сделать это вместо этого:

sudo su -c 'cd ... & chmod ... && chown ... ' - oradba
sudo su -c '...' - orainst
0
08.10.2018, 16:52
1 ответ

Я думаю, что здесь должен работать символ новой строки, так как экран \nявно указан как один из экранов подсказки. Оболочке также должно быть легко интерпретировать, ей просто нужно сбросить длину приглашения до нуля при переходе на следующую строку.

Насколько я тестировал, казалось, что двойные \[\[и \]\]в конце вызывают проблемы.

Здесь у вас есть один набор \[ \]вокруг всей последней части, а затем два таких же набора внутри него.

\[\[\033[5m\]${TEAL}>>\[\033[0m\]\]
  ^^^^^^^^^^^         ^^^^^^^^^^^

Возможно, вам следует удалить внешние:

\[\033[5m\]${TEAL}>>\[\033[0m\]

С цветовыми кодами все в порядке, так как при установке PS1вы используете двойные кавычки, поэтому цветовые переменные расширяются при присвоении, и экранирование \[ \]внутри них работает.


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

Что-то вроде PROMPT_COMMAND='printf "${RESET}/${LGREEN}$USER@${GREEN}$(date +%T)${DGREEN} $PWD ${RESET}\n"'должно работать, хотя в этом случае вам нужно иметь переменные цвета без \[ \].

0
28.01.2020, 04:12

Теги

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