2017-04-21 159 views
3

我想爲Bash設置一個環境變量。但是,我需要在之前設置之前的任何shell的啓動腳本(包括/etc/profile),因爲/etc/profile根據此變量的值的不同而行爲不同。我可以在Bash的命令行上設置一個環境變量嗎?

具體而言,我想創建一個MinTTy的快捷方式,類似於git-bash,但我需要在shell啓動之前或至少在開始處理任何啓動腳本之前設置MSYSTEM環境變量。

MinTTy在啓動shell之前設置環境變量的解決方案也將被接受。

編輯: 我所真正需要的是不大不小的命令行選項來BASH將設置環境變量,有些類似-D選項最C(及其他)編譯器。這將是一個「一般情況」解決方案。或者,MinTTy的類似選項(命令行或配置)也可以完成這項工作。

對於我的具體需求,我有一個潛在的解決方法的想法:運行一個BASH腳本 - 沒有啓動腳本 - 設置我需要的變量和另一個shell作爲登錄shell。

+0

不知道這是否會爲你的情況下工作,但trycreating設置該ENV包裝腳本變量,然後執行= >>「source/etc/profile」。加上在啓動/登錄時執行的任何其他腳本。 – zee

+0

@zee我認爲。但是,我必須完全複製整個啓動過程:登錄/交互式,正確的'profile'和'bashrc'文件等。 – Menachem

+0

我可以嘗試啓動沒有啓動文件的shell,但只執行一個shell腳本來設置環境變量,然後'exec'sa登錄或交互式shell。 – Menachem

回答

2

定義您的快捷方式文件的目標如下:

C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash" 

此命令:

  • 直接調用bash作爲登錄shell(-l
  • 其傳遞的命令(-c)定義感興趣的環境變量(MSYSTEM=MINGW64),然後調用bashexec -l bash)的新副本,其中繼承了現有的環境,再加上新的定義,但同樣源配置文件(S),由於-l
    (並預置-$0-bash報道的可執行文件名),如果你只用-開始Mintty因爲會發生,這是常規的Cygwin64 Terminal快捷方式)。

的替代方法是設置環境變量中視窗第一。

  • [沒有爲OP選項] 如果環境變量應該始終具有相同的值,將其堅持如下:運行sysdm.cpl,轉到Advanced選項卡,點擊Environment Variables...和定義根據需要變量MSYSTEM

  • 定義變量特設,如下創建一批文件,並進行快捷方式目標是批處理文件:

    @echo off 
    
    # Define the env. variable with the desired value. 
    set "MSYSTEM=MINGW64" 
    
    # Invoke Mintty with a login shell, which will now see the env. variable. 
    # Adjust the path to mintty.exe as needed. 
    c:\cygwin64\bin\mintty.exe - 
    

注:從打開批處理文件在打開Mintty之前,快捷鍵會短暫地打開一個常規控制檯窗口,這可能是不受歡迎的。

一個簡單的幫手WSH腳本,如我在this answer中演示的那樣,可以防止這種情況發生。

+1

@Menachem:我的榮幸;好點重新''';我已經更新了答案,但爲了與默認行爲保持一致,我使用了'exec -l bash',以便'$ 0'報告'-bash',而不是' -/bin/bash'。 – mklement0

0

您應該可以像執行命令提示一樣進行操作。因此,你可以這樣做:

set VAR=VarContents 
+0

我能建議您刪除這個答案嗎?它在我的答案中重複了內容(甚至在您發佈自己的答案時,它的原始形式仍然存在),而且它本身不足以解決OP的問題。 – mklement0

1

雖然我已經接受了上述的回答,我發現這個鏈接,專門用於解決我的問題的第二部分(Mintty具體)或運行前設置環境變量的另一種方式命令。

的Windows快捷方式的內容可以是:

C:\cygwin64\bin\mintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l 

(由Mintty Tips建議:Setting environment variables

相關問題