Eu quero que meu script bash (especificamente o meu ~/.bashrc
) faça algo somente se o terminal foi aberto diretamente por mim e faça outra coisa se ele foi aberto através de um aplicativo, por exemplo, VS Code. Como posso determinar qual é o caso? Existe uma variável para isso? Desde já, obrigado.
bash
gnome-terminal
bashrc
Saco de papel
fonte
fonte
env
comando. Veja se existe uma variável específica do VS que possamos usar.yakuake
e tenho umPULSE_PROP_OVERRIDE_application.name=Yakuake
conjunto de variáveis exterm
conjuntosXTERM_VERSION=XTerm(322)
na minha máquina.env >env_term1
em um emulador,env >env_term2
em um segundo e como usar o quediff env_term{1,2}
diz é muito útil. Afinal, OP diz ex Código VS .Respostas:
Você provavelmente poderia fazer isso retornando à ancestralidade do shell e calculando se foi iniciado por algo que equivale a "você" ou outro programa.
Obtenha o PID (ID do processo) do shell e, a partir dele, o PPID (ID do processo pai). Continue subindo até chegar a algo que lhe diga de onde veio. Você pode precisar experimentar no seu sistema - pelo menos, não sei se será universal.
Por exemplo, no meu sistema, obtenha o PID de um shell e use
ps
para mostrar que ébash
:Obtenha o PPID do 18852:
Descubra o que é o PPID (18842):
Podemos ver que é o gnome-terminal, ou seja, o emulador / janela do terminal. Talvez isso seja bom o suficiente para você, se o seu shell iniciado por outro programa não estiver sendo executado em uma janela do emulador de terminal.
Se não for bom o suficiente, suba outro nível:
Isso nos diz que
gnome-terminal
foi iniciado porinit
. Eu suspeito que seu shell iniciado por outro programa terá algo diferente lá.fonte
pstree -s $$
init
processo não é o pid 1, porém, não tenho certeza se isso mudaria alguma coisa.gnome-terminal
. Eu executei meu comandoif [ $(pstree -s $$ | grep "gnome-terminal" -c) -gt 0 ]; then ...
e funcionou.No que diz respeito ao Visual Studio Code, aparentemente existe uma maneira de definir variáveis de ambiente adicionais para o terminal integrado . Portanto, configure o Visual Studio para usar esta configuração:
E dentro de
~/.bashrc
:Em geral, você pode confiar no ambiente dado ao
bash
processo. Por exemplo, a$TERM
variável e execute umaif..then...else...fi
ramificação semelhante para[ "$TERM" = "xterm" ]
ou qualquer outra coisa. Caso a caso, você pode investigar as diferenças no ambiente executandoenv
em cada console, salvá-lo no arquivo como emenv > output_console1.txt
ediff output_console1.txt output_console2.txt
conforme sugerido pela sobremesa nos comentários .fonte
$Env:var
não é a sintaxe para variáveis de ambiente no Bash. Isso me parece uma coisa do PowerShell.$foo
é o suficiente. Café provavelmente não é suficiente.Se você estiver falando de um aplicativo de terceiros específico, use uma variável de ambiente. A maioria dos programas passa por todo o ambiente inalterado quando eles executam novos processos.
Portanto, inicie este aplicativo com uma var env personalizada que você pode verificar . por exemplo, crie um alias para isso
alias vs=RUNNING_FROM_VSCODE=1 VSCode
ou crie um script de wrapper como este:Então no seu
.bashrc
, você pode fazerUma declaração aritmética bash
(( ))
é verdadeira se a expressão for avaliada como um número inteiro diferente de zero (razão pela qual usei1
acima). A cadeia vazia (para um env var não definido) é falsa. É bom para variáveis booleanas do bash, mas você pode facilmente usá-lotrue
e procurá-lo com um POSIX tradicionalSe seu aplicativo limpa principalmente o ambiente para seus filhos , mas ainda passa
$PATH
inalterado, você pode usá-lo no seu wrapper:e verifique-o com uma correspondência de padrão como o bash
[[ "${PATH%RUNNING_FROM_VSCODE}" != "$PATH" ]]
para verificar se a remoção de um sufixo do PATH o altera.Isso deve fazer uma pesquisa extra de diretório inofensivamente quando o programa estiver procurando por comandos externos não encontrados.
/dev/null
definitivamente não é um diretório em nenhum sistema, por isso é seguro usá-lo como um diretório falso que resultará rapidamenteENOTDIR
se as pesquisas PATH não encontrarem o que estão procurando nas entradas PATH anteriores.fonte
Aqui estão meus 2 centavos. Basta adicioná-lo ao seu
.bashrc
. Substituaterminals
por seus terminais favoritos eexport
comande pelos seus.fonte