Да, _
— это переменная окружения новой оболочки Bash; вы можете увидеть это, запустив
tr '\0' '\n' < /proc/$$/environ | grep _=
внутри оболочки :, который показывает содержимое начальной среды оболочки. Вы не увидите его в первой оболочке, потому что не было предыдущей оболочки, чтобы установить его до его запуска.
Расширение $_
внутри Bash относится к специальному параметру _
, который расширяется до последнего аргумента предыдущей команды. (Внутри Bash обрабатывает это с помощью _
переменной оболочки, которая обновляется каждый раз при анализе команды, но на самом деле это деталь реализации. Он «не экспортируется» каждый раз, когда команда анализируется.)export
не показывает _
, потому что это не переменная, помеченная как экспортируемая; однако вы можете увидеть это в выводе set
.
В первом примере новая оболочка Bash анализирует и выполняет команды в своих файлах запуска, поэтому при запуске explore | grep '-='
_
уже были перезаписаны и помечены как не экспортированные.
В примере dash
похоже, что он не выполняет никакого файла start -up, поэтому вы видите переменную как переменную среды, которая была установлена Bash перед запуском dash
.
Поместите это в~/.tmux.conf
bind-key Up select-pane -U
bind-key Down select-pane -D
bind-key Left select-pane -L
bind-key Right select-pane -R