コンソールウィンドウのタイトルをセットする(Windows) – (2)

うーむ、なぜそう思った?

.bashrc に書けないなんて、なぜそう思った? むしろそうすべきであった…。

それと SHLVL から考えてもどう考えても .bashrc でやるべき。そうしないと子 bash 時もせっかくインクリメントされた SHLVL がウィンドウタイトルに反映されぬ。

親子関係を精密にコントロール出来る、という意味においても、.bashrc 内でやってしまうのが一番良くて、ちと読みにくい上にみょうちくりんな依存だらけで気持ち悪いといえば気持ち悪いが、一応これでオケ:

.bashrc
 1 #! /bin/bash
 2 function _mk_ps {
 3     _ps="\[\e]0;${_TBTITLE_ORIGIN} - \s-\v[$SHLVL]\007\]"
 4     _ps="${_ps}\[\e[35m\]\W\$\[\e[m\] "
 5     echo "${_ps}"
 6 }
 7 
 8 if test \! -z "${_TBTITLE_ORIGIN}"
 9 then
10     export PS1=`_mk_ps`
11 else
12 #
13 _TBTITLE_ORIGIN=`
14 python <<___END___
15 import csv
16 import subprocess
17 
18 import psutil  # pip install psutil
19 
20 reader = csv.reader(
21     subprocess.check_output(
22         ["tasklist", "/FO", "CSV", "/v", "/NH"]
23         ).strip().split("\r\n"))
24 titles = {}
25 for line in reader:
26     del line[2:-1]
27     _, pid, title = line
28     titles[int(pid)] = title.decode("mbcs")
29 parent = psutil.Process().parent()
30 title = "N/A"
31 while parent and title == "N/A":
32     title = titles[parent.pid]
33     parent = parent.parent()
34 print(title.split(" - ")[0])
35 ___END___`
36     export PS1=`_mk_ps`
37     export _TBTITLE_ORIGIN
38 fi