Переменные среды не расширяются правильно, когда связаны с функцией

$TMUX_PANE

tmux автоматически определяет эту переменную для нас, и она просто работает:

sleep 2;tmux split-window -h -t $TMUX_PANE

Это фокусирует внимание на разделении при его создании, этого можно избежать с помощью-d:

sleep 2;tmux split-window -dh -t $TMUX_PANE
0
01.04.2020, 10:46
2 ответа

Скорее всего, вы выполняете функцию и устанавливаете значение переменной только один раз.

Чтобы автоматически обновлять значение переменной всякий раз, когда вы используете cd, вы можете переопределить встроенную оболочку -в cdследующим образом:

cd () {
    builtin cd "$@"
    echo_pwd=$( echo_pwd )/
}

Это вызовет встроенный -в cdс любыми аргументами, которые вы передали функции cd, а затем обновите значение вашей переменной (обратите внимание, что exportне требуется, если вы уже экспортировали его в другом месте, если его вообще нужно экспортировать ).

Полная установка может выглядеть так:

echo_pwd () {
    printf '%s\n' "$PWD"    # or just: pwd
}
export echo_pwd="$( echo_pwd )/"

cd () {
    builtin cd "$@"
    echo_pwd=$( echo_pwd )/
}

Я выбрал с использованиемprintfс $PWDвместо вызова утилиты pwd, и я также использую $(...)для замены команд .

1
19.03.2021, 02:30

В export echo_pwd="`echo_pwd`/"замена команды выполняется только один раз, когда переменная установлена.

Если вам нужно обновить значение переменной, вам нужно будет установить его снова.

В интерактивном bash вы можете использовать PROMPT_COMMAND, который выполняется каждый раз, когда печатается приглашение:

$ PROMPT_COMMAND='echo_pwd="`echo_pwd`/"'
$ cd bar/
$ echo $echo_pwd/
/tmp/foo/bar//
$ cd baz
$ echo $echo_pwd
/tmp/foo/bar/baz/
1
19.03.2021, 02:30

Теги

Похожие вопросы