My Bash Prompt obecnie ustawia pasek tytułowy xterm w następującej kolejności:
PS1='\033]0;\u@\h>\w\007'
Czy istnieje prosty sposób wyświetlenia bieżącego polecenia na pasku tytułowym. Na przykład, jeśli dostosowuję plik za pomocą tail -f foo.log
, chcę, aby mój pasek tytułu powiedział tail -f foo.log
.
bash
prompt
xterm
window-title
dogbane
źródło
źródło
.bashrc
po każdym poleceniu w mojej powłoce, otrzymuję ten wynik0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}
. Zakładam, że mogę wyłączyć to wyjście, przypisując polecenie trap doPS1
? JednakPS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
nie działa. To prowadzi do błędubash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
.trap
polecenie jako osobne polecenie , aby nie przypisywać go do PS1.(Zainspirowany tą odpowiedzią SU )
Możesz połączyć kilka sztuczek bashowych:
$BASH_COMMAND
zawiera aktualnie wykonywane poleceniePułapki DEBUG i niech program obsługi ustawi tytuł na
$BASH_COMMAND
:Spowoduje to zmianę tytułu, dopóki coś innego go nie zmieni, ale dopóki
$PS1
nie zmienisz tego, nie będzie problemu - uruchomisz polecenie, moduł obsługi DEBUG zmieni pasek tytułu, a gdy polecenie zakończy bash, rysuje nowy monit i ponownie resetuje pasek tytułu.Przydatną wskazówką tutaj (również skąd pochodzi odpowiedź SU) jest:
Spowoduje to, że bash propaguje pułapkę DEBUGOWĄ do wszystkich uruchomionych podpowłok; w przeciwnym razie pasek tytułu nie zostanie w nich zmieniony
źródło
ssh
/dev/tty
zamiast stderr?Obejrzałem własne rozwiązanie z różnych postów. Spowoduje to utworzenie tytułu zawierającego użytkownika, nazwę hosta, pwd, tty i aktualnie wykonywaną komendę (dla bash).
Wygląda to tak (bez wykonywania polecenia):
I tak (wykonanie polecenia):
Gdzieś w .bashrc rozszerzyłem PS1:
Dodaje bieżące polecenie, używając historii 1 i pułapki :
Dostosuj się do swoich potrzeb.
źródło