Gnome Terminal позволяет иметь разные профили. Можно ли получить имя профиля, под которым был запущен этот терминал, из командной строки?
решение1
Это, по-видимому, невозможно, однако вы можете узнать заголовок терминала по умолчанию, поэтому все, что вам нужно сделать, чтобы различать вкладки или профили, — это настроить разные заголовки по умолчанию.
Управляющая последовательность ESC [ 2 1 t
просит терминал вставить свой заголовок в поток ввода терминала. (См.Xterm контрольные последовательностидля получения дополнительной информации об управляющих последовательностях для xterm и подобных программ). В частности, терминал (если он поддерживает эту функцию; gnome-terminal поддерживает) отвечает ESC ] l title ESC \
.
Вот функция bash, которая устанавливает переменную, имя которой передается в качестве первого аргумента в заголовок xterm, если он доступен. Она отключается через одну секунду, если терминал не поддерживает эту функцию, и возвращает ненулевой код ошибки.
read_xterm_title () {
# Clear IFS so that read doesn't do any word splitting.
local IFS= read_xterm_title_header=
# $1 is expected to be a parameter name. Do a crude format check.
if [[ $1 = '' || $1 = *[!0-9_A-Za-z]* ]]; then return 120; fi
eval $1=
# Expect "ESC ] l title ESC \\"
read -p $'\e[21t' -s -t 1 -r -n 3 read_xterm_title_header &&
[[ $read_xterm_title_header = $'\e]l' ]] &&
read -p '' -s -t 1 -r -d $'\e' $1 &&
read -s -t 1 -r -n 1
}
read_xterm_title title
case $title in ...
решение2
Раньше вы могли делать это с помощью gconftool2
, затем с dconf
, а теперь вам придется делать с , gsettings
но это GUID, поэтому что-то вроде этого может быть тем, что вам нужно:
gsettings get org.gnome.Terminal.ProfilesList default | tr -d \'
и в контексте установки переменной:
gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d \')/ cursor-blink-mode off
решение3
Кажется, это срабатывает:
gsettings get org.gnome.Terminal.Legacy.Profile:$dconfdir/":"$1/ visible-name
Украдено изздесь.
решение4
Это не совсем ответ на вопрос. Но если вы хотите различать профили, вы можете попробовать проверить, например, цвет фона.
[[ "$(xtermcontrol --get-bg)" == "rgb:3b3b/3c3c/3e3e" ]] && echo profile-1 || echo profile-2
Он возвращает цвет фона текущего профиля; однако, это не обязательно тот, с которого он был запущен, поскольку профиль можно изменить «на лету».