У меня есть некоторый код в .bashrc
, который устанавливает заголовок окна терминала, используя текущую команду, и он прекрасно работает в Unity, где терминал находится в окне. Однако, когда я вхожу в систему с помощью терминала Ctrl kbd> + Alt kbd> + F1 kbd> (как бы он ни назывался), мое приглашение заполняется мусором, который это различные escape-последовательности, которые устанавливают (несуществующий) заголовок окна.
Как я могу определить из скрипта bash, нахожусь ли я в одном или другом?
Если вы находитесь в окне терминала с графическим интерфейсом, вы не находитесь в оболочке входа в систему. И если вы находитесь в tty, вы уверены, что в оболочке входа в систему. Чтобы проверить их, вы можете использовать:
shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'
или, проще:
shopt | grep login
Пример для использования в выражении if
:
login_shell=$(shopt | grep login | cut -f2)
if [ "$login_shell" = "on" ]; then
echo 'Login shell'
# do stuff in login shell
else
echo 'Not login shell'
# do stuff in non login shell
fi
Не может быть намного проще, чем это:
echo "$TERM"
, если он возвращает «xterm», вы находитесь в терминальном окне
, если он возвращает «linux», вы находитесь в виртуальном (Ctrl-Alt-F1) терминал
В окне терминала в сеансе X11 обычно устанавливается переменная окружения DISPLAY (за исключением некоторых случаев, когда используется su); это обычно не будет иметь место в консоли.