Nếu bạn đang nói về một ứng dụng của bên thứ ba cụ thể, thì hãy sử dụng biến môi trường. Hầu hết các chương trình sẽ chuyển qua toàn bộ môi trường không thay đổi khi chúng rẽ nhánh + thực hiện các quy trình mới.
Vì vậy, hãy bắt đầu ứng dụng này với một var env tùy chỉnh mà bạn có thể kiểm tra . ví dụ: tạo một bí danh cho nó như thế nào alias vs=RUNNING_FROM_VSCODE=1 VSCode
, hoặc tạo một tập lệnh bao bọc như thế này:
#!/bin/sh
export RUNNING_FROM_VSCODE=1
exec VSCode "$@"
Sau đó, trong bạn .bashrc
, bạn có thể làm
if (($RUNNING_FROM_VSCODE)); then
echo "started from inside VSCode"
# RUNNING_FROM_VSCODE=0 # optional if you only want the immediate child
fi
Một câu lệnh số học bash (( ))
là đúng nếu biểu thức ước lượng thành một số nguyên khác không (đó là lý do tại sao tôi sử dụng 1
ở trên). Chuỗi rỗng (đối với var env unset) là sai. Thật tuyệt vời cho các biến bashean, nhưng bạn có thể dễ dàng sử dụng true
và kiểm tra nó với POSIX truyền thống
if [ "x$RUNNING_FROM_VSCODE" = "xtrue" ]; then
echo "started from inside VSCode"
fi
Nếu ứng dụng của bạn chủ yếu xóa môi trường cho trẻ em , nhưng vẫn $PATH
không thay đổi, bạn có thể sử dụng ứng dụng này trong trình bao bọc của mình:
#!/bin/sh
export PATH="$PATH:/dev/null/RUNNING_FROM_VSCODE"
exec VSCode "$@"
và kiểm tra xem nó có khớp mẫu như bash [[ "${PATH%RUNNING_FROM_VSCODE}" != "$PATH" ]]
để kiểm tra xem việc tước hậu tố từ PATH có làm thay đổi nó không.
Điều này sẽ vô hại thực hiện một tìm kiếm thư mục bổ sung khi chương trình đang tìm kiếm các lệnh bên ngoài không tìm thấy. /dev/null
chắc chắn không phải là một thư mục trên bất kỳ hệ thống nào, vì vậy việc sử dụng như một thư mục không có thật sẽ nhanh chóng dẫn đến kết quả ENOTDIR
nếu các tìm kiếm PATH không tìm thấy những gì họ đang tìm kiếm trong các mục PATH trước đó.
env
lệnh. Xem nếu có một biến cụ thể VS mà chúng ta có thể sử dụng.