Я создаю образ Singularity и хочу иметь пользовательское приглашение bash, точно так же, как я могу установить приглашение bash как обычный пользователь, установив переменную PS1
в моем ~/.bash_profile
.
Но, к сожалению, Singularity делает что-то для обеспечения собственной подсказки, которая выглядит следующим образом: Singularity>
. Это не очень полезная подсказка.
Я пытался установить PS1 в файле определения, как в этом примере:
# File prompt-test1.def
Bootstrap: shub
From: alpine:latest
%environment
export PS1="[my-container]\w\$ "
Я создал и запустил этот образ, но безрезультатно:
sudo singularity build prompt-test.sif prompt-test.def
singularity shell prompt-test.sif
# shows Singularity>
Используя команду env
в оболочке, я заметил, что PROMPT_COMMAND
установлено:
echo $PROMPT_COMMAND
# PS1="Singularity> "; unset PROMPT_COMMAND
... поэтому я попытался изменить это:
# File prompt-test2.def
Bootstrap: shub
From: alpine:latest
%environment
export PROMPT_COMMAND='PS1="[my-container]\w\$ "; unset PROMPT_COMMAND'
... но подсказка остается неизменной! Но теперь PROMPT_COMMAND
внутри контейнера выглядит как
echo $PROMPT_COMMAND
# PS1="[my-container]\w\$ "; unset PROMPT_COMMAND; PROMPT_COMMAND="${PROMPT_COMMAND%%; PROMPT_COMMAND=*}";PS1="Singularity> "
, отредактированный для замены на более подробную информацию : Проблема заключается в том, в каком порядке исходят файлы в /.singularity.d/env
. Определяемые пользователем переменные среды задаются в 01-base.sh
, но в 99-base.sh
есть строка
PS1="Singularity> "
..., которая перезаписывает мое приглашение! Кроме того, подход, использующий PROMPT_COMMAND
, затруднен из-за некоторого кода в /.singularity.d/actions/shell
или .../run
.
В качестве обходного пути пользователь может использовать собственный .profile
. Но это не работает, если домашний каталог пользователя привязан к дому внутри контейнера, потому что .profile
внутри и снаружи контейнера то же самое. Кроме того, я не хочу, чтобы вмешательство пользователя просто меняло приглашение.
Как я могу получить мое приглашение?