nix-shell
PS1を独自の形式に変更します。
[nix-shell:~/snm]$
~/.bashrcに "$IN_NIX_SHELL"のチェックを追加しようとしましたが、うまくいきませんでした。
私が見つけた唯一の回避策は、次を実行することです。
nix-shell --run bash
答え1
Nix 2.4 [1]以降、nix-shell
ソースを保存できるNIX_SHELL_PRESERVE_PROMPT環境変数をPS1
追加することで追加できます。
home.sessionVariables = {
NIX_SHELL_PRESERVE_PROMPT=1;
};
答え2
これをサポートするNixバージョンに最適なオプションですが、独自の設定を指定している間に、次の事実を悪用する以前のNIX_SHELL_PRESERVE_PROMPT
バージョンの回避策があります。nix-shell
PS1
いいえ自分で設定すると、もう一度変更PROMPT_COMMAND
できます。PS1
直前プロンプトを表示する(読み取り:後ろに nix-shell
PROMPT_COMMAND
設定で変更しますPS1
(その後、独自の設定を解除します)。たとえば、表示専用のプロンプトが必要な場合は、>
次に進みます。
PROMPT_COMMAND='export PS1="> "; unset PROMPT_COMMAND'
export PS1="> "
変数がnix-shell
完了する必要がある時点で一度だけ実行されるようにします。
答え3
ラッパースクリプトnix-shell
PROMPT_COMMAND
ソリューションベースSara J
#!/usr/bin/env bash
# run nix-shell with a custom prompt string
# based on /etc/bashrc
# Provide a nice prompt if the terminal supports it.
if [ "$TERM" != "dumb" ] || [ -n "$INSIDE_EMACS" ]; then
PROMPT_COLOR="1;31m"
((UID)) && PROMPT_COLOR="1;32m"
if [ -n "$INSIDE_EMACS" ]; then
# Emacs term mode doesn't support xterm title escape sequence (\e]0;)
PS1="\n\[\033[$PROMPT_COLOR\][\u@\h:\w]\\$\[\033[0m\] "
else
PS1="\n\[\033[$PROMPT_COLOR\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] "
fi
if test "$TERM" = "xterm"; then
PS1="\[\033]2;\h:\u:\w\007\]$PS1"
fi
fi
# https://unix.stackexchange.com/a/729431/295986
export PROMPT_COMMAND="export PS1=${PS1@Q}; unset PROMPT_COMMAND"
exec nix-shell "$@"