Измените приглашение при запуске терминала из сценария bash (но не затрагивайте все терминалы)

У меня установлены два терминала, gnome-terminal и xfce4-terminal .

Я хотел бы иметь только терминал xfce, показывающий простое > как подсказку, когда я его запускаю. gnome-terminal должно оставаться неизменным (так что, по-моему, нет модификации bashrc ).

Я не против запуска xfce-terminal из сценария или другого терминала с некоторыми параметрами.

Я пытался:

 xfce4-terminal -x export PS1='> ' 

но это вызывает ошибку и, по-видимому, не работает.

Любое решение приветствуется, даже если оно немного хакерское

Проверьте, какой терминал открыт:

  case "$TERM" in gnome-terminal ) PS1="[\h] \W > \[\033]0;[\u@\h] \w\007\]" ;; xfce4-terminal ) PS1="> " ;; esac 

Измените свой .bashrc и проверьте имя родительского процесса.

 parent_process=$(ps -o comm= -p $PPID) parent_process=${parent_process##*/} case "$parent_process" in xfce4-terminal) PS1='> ';; esac 

Другим методом было бы установить переменную среды: запустите PROMPT_THEME=plain xfce4-terminal и проверьте значение PROMPT_THEME в вашем .bashrc . Вы можете отключить или хотя бы отключить переменную там, так как иначе она также будет установлена ​​в терминалах, запущенных с первой.

 case $PROMPT_THEME in plain) PS1='> ';; esac export -n PROMPT_THEME 

С xfce4-terminal это не будет работать, за исключением первого экземпляра, потому что последующие экземпляры просто уведомляют запущенный экземпляр, чтобы открыть новое окно, поэтому новые экземпляры наследуют среду от запущенной. (Yeech!) Вместо этого вы можете установить переменную окружения через команду, которую вы запускаете в терминале, с помощью утилиты env .

 xfce4-terminal -x env PROMPT_THEME=plain bash 

Если ваш ~/.bashrc не устанавливает PROMPT_COMMAND , вы можете запустить xfce4-terminal как:

 PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal 

Один из способов сделать это – начать с текущего BASH PID (вы получите его с помощью $$), а затем получить PPID и т. Д., Пока не найдете, какой терминал является предком оболочки bash. Основываясь на этой информации, вы устанавливаете PS.

Обычно родителем оболочки будет терминал

Доказательство концепции в моей системе (Debian 7).

 $ PARENT_PID=$(ps --pid=$$ -o ppid --no-headers) $ ps --pid $PARENT_PID -o command --no-headers gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL 

Поэтому в моей системе достаточно взглянуть на родителя оболочки, чтобы найти, что он запускается с терминала gnome.

Сжатый в одной строке:

 $ ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL 

Я попытался добавить эту строку в мой .bashrc

 MY_TERMINAL=$(ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers | cut -f 1 -d " ") 

И я проверил, что MY_TERMINAL содержит gnome-terminal .

Итак, это должно сделать это.

Надеюсь, поможет.