gpt4 book ai didi

shell - 如何更改奇点容器中的默认提示

转载 作者:行者123 更新时间:2023-12-04 16:18:22 26 4
gpt4 key购买 nike

我正在创建一个 Singularity 图像并且我想要一个自定义 bash 提示符,就像我可以通过在我的 ~/中设置变量 PS1 来将 bash 提示符设置为普通用户一样.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>

在 shell 中使用 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> "

...这会覆盖我的提示!此外,由于 /.singularity.d/actions/shell.../run 中的某些代码,使用 PROMPT_COMMAND 的方法受到阻碍。

解决方法是让用户使用自己的 .profile。但是如果用户的主目录绑定(bind)到容器内的主目录,这不起作用,因为容器内部和外部的 .profile 是相同的。另外,我不希望用户干预只是为了更改提示。

如何获得提示?

最佳答案

默认情况下,singularity 运行的 shell 明确不加载任何配置文件或 rc 文件。提示虽然很烦人,但它是为了提醒您您在图像中,而不是在主机操作系统中。

如果您仍然想覆盖它,您需要向 /.singularity.d/env 添加一个附加文件,该文件将在其他所有内容之后运行。例如,

Bootstrap: docker
From: alpine:latest

%post -c /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之后添加-c/bin/bash告诉singularity使用/bin/bash而不是默认的/bin/sh,对于之后的多行 cat 步骤是必需的。

编辑: 旧版本的奇异性在第一行使用 shebang 来指定备用 shell,但已更改为 -c/path/to/shell

关于shell - 如何更改奇点容器中的默认提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61116965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com