Как изменить подсказку subshell


8

Я пытаюсь создать простой скрипт, который, помимо прочего, создаст подоболочку:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

Вопрос в том, что мне нужно изменить приглашение по умолчанию, например:

$ # оболочка по умолчанию
$
./myscript (myscript) $ #
subshell (myscript) $ exit
$

Я пытался изменить PROMPTи PS1, но ни одна из этих работ. Как я могу это сделать?

PS: мне нужно решение, которое работает как на Bash, так и на ZSH, если это возможно.



Не совсем дубликат, поскольку этот другой вопрос был bashтолько для .
Стефан Шазелас

Выглядит как правильный дубликат ;-(
маргаритка

Ответы:


7

Я думаю, что вы можете создать подоболочку с другой подсказкой, подобной этой:

$ bash --rcfile <(echo "PS1='subshell prompt: '") -i

пример

Текущий env:

$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i

В субоболочке:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Вернуться к оригинальной оболочке:

$ 

1
Вы можете использовать here stringвместо процесса замены. например <<< "PS1...".
Иордания

1
@jordanm - можешь привести пример? Я возился с этим, но не смог получить рабочий пример, используя строки здесь.
SLM

2

Причина, по которой не работа может быть потому , что при загрузке оболочки (который должен быть , например .: /bin/bash), он будет в конечном итоге перезагрузки конфигурационных файлов, которые включают в себя переменные окружения для подсказки (например .: $HOME/.bashrc) после того прошло переменные окружения, которые вы хотите - таким образом, ваши переменные отбрасываются.

Возможно, вы захотите проверить параметры оболочки для загрузки пользовательских файлов конфигурации (например, --rcfileв Bash IINM) и использовать их, а также \envдля передачи переменных среды, которые вы хотите. Проблема в том, что когда вы выполняете этот запуск, подоболочка становится зависимой от оболочки.

( CAVEAT EMPTOR : я пока не считаю это ответом - в частности, я еще не пробовал ничего из этого в моей системе.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.