เนื่องจากไม่มีใครให้คำตอบกับคุณฉันจึงพยายามแม้จะมีซอฟต์แวร์ที่แตกต่างอย่างสิ้นเชิง ดังนั้นนี่คือคำตอบทั่วไปเกี่ยวกับวิธีการทำกับซอฟต์แวร์ใด ๆ มีสองวิธีที่อยู่ในใจ:
1. สภาพแวดล้อมที่แตกต่างกัน
เปิด Terminal env > env.terminal
และวิ่ง เปิด Android สตูดิโอ, env > env.studio
และเรียกใช้ ตอนนี้ในเทอร์มินัลทั้งสองคุณสามารถเรียกใช้diff -dby --suppress-common-lines env.terminal env.studio
(หาก Mac OS X มีตัวเลือกเหล่านั้นถ้าไม่-U1
ทำงานได้ดีพอ)
ตัวอย่างเช่นนี่คือความแตกต่างระหว่างxterm
และkonsole
ในกล่อง Linux ของฉัน (หมายเหตุ: การเว้นวรรคปรับเปลี่ยนเพื่อให้พอดีกับหน้า):
> PROFILEHOME=
> SHELL_SESSION_ID=1e8d5ab2d16641668485f991a1beffe3
> QSG_RENDER_LOOP=
> COLORTERM=truecolor
XTERM_SHELL=/bin/bash <
> KONSOLE_DBUS_SESSION=/Sessions/1
XTERM_VERSION=XTerm(327) | KONSOLE_DBUS_WINDOW=/Windows/1
TERM=xterm <
> TERM=xterm-256color
> KONSOLE_DBUS_SERVICE=:1.1514
> QMLSCENE_DEVICE=
> KONSOLE_PROFILE_NAME=Default
> COLORFGBG=15;0
WINDOWID=83886094 | WINDOWID=115343366
XAUTHORITY=/tmp/xauth-1000-_0 | XAUTHORITY=/home/anthony/.Xauthority
KDED_STARTED_BY_KDEINIT=1 <
XTERM_LOCALE=en_US.UTF-8 <
บางสิ่งนั้นมีเสียงรบกวนอย่างชัดเจนจากวิธีที่ฉันเปิดตัวเทอร์มินัลสองแบบที่แตกต่างกัน แต่คนอื่นไม่ได้ ถ้าฉันต้องการบางอย่างเฉพาะใน XTerm if [ -n "$XTERM_VERSION" ]
ดูเหมือนว่าจะเป็นวิธีที่ดีในการทำเช่นนั้น ในทำนองเดียวกันสำหรับ Konsole $KONSOLE_PROFILE_NAME
ก็น่าจะเป็นสิ่งที่ดีเช่นกัน
2. กระบวนการผู้ปกครองที่แตกต่างกัน
เปลือกรู้กระบวนการ ID $$
ของตัวเองก็สามารถเข้าถึงได้ผ่านทาง POSIX ยัง$PPID
ต้องได้รับ PID หลักโดยตรงดังนั้นฉันสงสัยว่าคุณมี zsh ด้วยเช่นกัน ถ้าไม่ps
ได้รับมันสำหรับคุณ: ppid=$(ps -o ppid= $$)
. จากนั้นคุณสามารถเรียกใช้คำสั่งพร้อมกับ ps:
xterm:~$ ps -o args= $PPID
/usr/bin/xterm
konsole:~$ ps -o args= $PPID
/usr/bin/konsole
(คุณสามารถลองได้-o comm=
เช่นกัน)
ในเชลล์สคริปต์ดูเหมือนว่า:
ppid=$(ps -o ppid= $$) # if you don't have PPID for some reason
if [ "$(ps -o args= $ppid)" = "/usr/bin/xterm" ]; then
echo "do xterm stuff"
fi
หากคุณต้องการเพิ่มทรีกระบวนการเพิ่มเติมคุณสามารถใช้ps
เพื่อรับพาเรนต์ของพาเรนต์เป็นต้น