Belirli bir üçüncü taraf uygulamasından bahsediyorsanız, bir ortam değişkeni kullanın. Çoğu program, yeni süreçleri çatalla + çalıştırdıklarında tüm ortam boyunca değişmeden geçer.
Bu nedenle, kontrol edebileceğiniz özel bir env var ile bu uygulamayı başlatın . örneğin bunun için bir takma ad oluşturun alias vs=RUNNING_FROM_VSCODE=1 VSCodeveya bunun gibi bir sarıcı komut dosyası oluşturun:
#!/bin/sh
export RUNNING_FROM_VSCODE=1
exec VSCode "$@"
Sonra .bashrcsenin içinde yapabilirsin
if (($RUNNING_FROM_VSCODE)); then
echo "started from inside VSCode"
# RUNNING_FROM_VSCODE=0 # optional if you only want the immediate child
fi
(( ))Eğer ifade sıfırdan farklı bir tamsayı olarak değerlendirilirse bash aritmetik ifadesi doğrudur (bu yüzden 1yukarıda kullandım ). Boş dize (bir unset env var için) false değeridir. Bas boole değişkenleri için güzel, ancak truegeleneksel bir POSIX ile kolayca kullanabilirsiniz ve kontrol edebilirsiniz.
if [ "x$RUNNING_FROM_VSCODE" = "xtrue" ]; then
echo "started from inside VSCode"
fi
Uygulamanız çoğunlukla çocukları için ortamı temizliyor , ancak yine de $PATHdeğişmeden geçiyorsa , bunu paketleyicinizde kullanabilirsiniz:
#!/bin/sh
export PATH="$PATH:/dev/null/RUNNING_FROM_VSCODE"
exec VSCode "$@"
ve [[ "${PATH%RUNNING_FROM_VSCODE}" != "$PATH" ]]PATH'den bir sonek çıkarmanın onu değiştirip değiştirmediğini kontrol etmek için bash gibi bir desen eşleşmesi ile kontrol edin.
Bu, program bulunmayan harici komutları ararken zararsız bir şekilde ekstra bir dizin araması yapmalıdır. /dev/nullkesinlikle herhangi bir sistemde bir dizin değildir, bu yüzden ENOTDIRPATH aramaları önceki PATH girişlerinde aradıklarını bulamazsa hızlı bir şekilde sonuçlanacak sahte bir dizin olarak kullanmak güvenlidir .
envkomutu çalıştırmayı deneyin . Kullanabileceğimiz VS'ye özgü bir değişken olup olmadığına bakın.