簡體   English   中英

在python或bash(或兩者)中為終端會話的范圍設置環境變量

[英]Setting environment variables for the scope of a terminal session in python or bash (or both!)

我想為終端會話的范圍設置環境變量。

例如,用戶將打開一個終端,輸入諸如setproject <project_name> ,並將導出環境變量PROJECT 當他們關閉端子時,變量設置將丟失。 該系統令人印象深刻的是,它將知道什么項目名稱有效,什么無效。 我在做得很好的地方工作過,我想知道它是如何完成的。

我希望用戶不必鍵入source setproject <project_name>並且我還想檢查他們指定的項目是否有效。

我已經在python中編寫了一些東西,它檢查項目名稱的有效性(針對yaml配置文件),並將其傳遞給bash腳本,但是它實際上沒有用(環境變量未正確設置)。已設置,但僅用於python腳本的范圍)

那么,我該怎么做呢? 有什么很好的例子可以說明我在網上尋找什么嗎?

您不能使用普通命令來執行此操作-普通命令(shell腳本,python腳本,二進制文件等)在主shell進程下作為子進程運行,並且不會影響主shell進程的環境。 但是外殼程序支持在外殼程序本身中“發生”的幾個類似命令的事物:函數和別名。 都需要在外殼中定義它們,然后才能使用它們,因此您需要將定義放入.bash_profile中(或安裝程序中合適的外殼初始化文件中的任何內容-參見此處 )。

我這樣做的方法是將setproject定義為shell函數,如下所示:

# ...in shell init file...
setproject() {
    if [ some_test_for_project_validity ]; then
        export PROJECT="$1"
    else
        echo "setproject: $1 is not a valid project name" >&2
        return 1
    fi
}

你需要這里的邏輯是太復雜,放在一個別名(他們更簡單,比功能笨),但你可以把實際的腳本在一個單獨的文件,並使用別名來避免明確source是:

# ...in shell init file...
alias setproject='source /path/to/setproject'

# .../path/to/setproject...
# note no shebang, since it won't be run as a normal command
if [ some_test_for_project_validity ]; then
    export PROJECT="$1"
else
    echo "setproject: $1 is not a valid project name" >&2
    return 1    # In a file to be source'd, use return instead of exit
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM