Как изменить приглашение по умолчанию в контейнере особенностей - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю образ 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 внутри и снаружи контейнера то же самое. Кроме того, я не хочу, чтобы вмешательство пользователя просто меняло приглашение.

Как я могу получить мое приглашение?

1 Ответ

1 голос
/ 16 апреля 2020

По умолчанию оболочки, запускаемые по сингулярности, явно не загружают ни один профиль или файлы r c. Это раздражающее напоминание напоминает вам, что вы находитесь в образе, а не в операционной системе хоста.

Если вы все равно хотите это переопределить, вам нужно добавить дополнительный файл к /.singularity.d/env это будет работать после всего остального. например,

Bootstrap: docker
From: alpine:latest

%post
#!/bin/bash
    CUSTOM_ENV=/.singularity.d/env/99-zz_custom_env.sh
    cat >$CUSTOM_ENV <<EOF
#!/bin/bash
PS1="[my_container]\w \$"
EOF
    chmod 755 $CUSTOM_ENV

Шебанг непосредственно под %post сообщает сингулярности, что нужно оценить этот блок с /bin/bash вместо значения по умолчанию /bin/sh, необходимого для многострочного шага cat впоследствии.

...