Linux

在 Linux 上,為不同的應用程序獲取不同的 .zshrc 文件

  • September 29, 2019

基於三個問題:

tl:dr – 例如:

  • .zshrc
if [ -f /usr/bin/tilix ]; then
 if [ -f ~/tilix.zshrc ]; then
   source ~/tilix.zshrc
 fi
elif [ -f /usr/bin/deepin-terminal ]; then
 if [ -f ~/deepin-terminal.zshrc ]; then
   source ~/deepin-terminal.zshrc
 fi
elif [ -f /usr/bin/code-insiders ]; then
 if [ -f ~/code-insiders.zshrc ]; then
   source ~/code-insiders.zshrc
 fi
else
   source ~/tilix.zshrc
fi
  • 以及 Deepin Terminal 和 Tilix 的桌面文件:
Exec=bash -c 'source $HOME/deepin-terminal.zshrc && deepin-terminal'
Exec=bash -c 'source $HOME/tilix.zshrc && tilix'
  • VSCode 的settings.json
{
 "terminal.integrated.shell.linux": "source $HOME/code-insiders.zshrc && /usr/bin/zsh"
}

但沒有任何效果。

也許我應該使用devilspie,但我不確定它是否會起作用。

從航站樓一側

在每個終端或終端啟動器的配置中,安排設置環境變數,例如TERM_SUBTYPE=tilixorTERM_SUBTYPE=deepinTERM_SUBTYPE=vscode。在您的.zshrc中,檢查此變數的值:

case $TERM_SUBTYPE in
 tilix) …;;
 …
 '') …;;
esac

'')行是什麼都沒有設置的情況TERM_SUBTYPE。如果您在這種情況下無事可做,可以將其忽略。

從外殼一側

終端模擬器通常是shell的父程序,所以檢查父程序。

case ${$(ps -p $PPID -o comm=):t} in
 tilix) …;;
 deepin-terminal) …;;
 code-insiders) …;;
 *) …;
esac

*)如果父程序不是已辨識的情況之一,則該行是一個備份。如果您在這種情況下無事可做,可以將其忽略。

引用自:https://unix.stackexchange.com/questions/544278