簡體   English   中英

我可以在Bash的命令行上設置環境變量嗎?

[英]Can I set an environment variable on Bash's command line?

我正在嘗試為Bash設置一個環境變量。 但是,我需要任何shell的啟動腳本(包括/etc/profile )之前設置它,因為/etc/profile根據此變量的值采取不同的行為。

具體來說,我想創建一個像git-bash一樣的MinTTy快捷方式,但是我需要在shell啟動之前設置MSYSTEM環境變量,或者至少在它開始處理任何啟動腳本之前。

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

編輯:我真正想要的是BASH的一個命令行選項,它將設置一個環境變量,有點類似於大多數C(和其他)編譯器的-D選項。 這將是一個“一般情況”的解決方案。 或者,MinTTy的類似選項(命令行或配置)也可以完成這項工作。

根據我的具體需要,我有一個潛在的解決方法:運行一個BASH腳本 - 沒有啟動腳本 - 設置我所需的變量,並exec另一個shell作為登錄shell。

定義快捷方式文件的目標,如下所示:

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
    (和prepends -$0-bash )中報告的可執行文件名稱,如果你只使用-啟動Mintty會發生這種情況,這就是常規的Cygwin64 Terminal快捷方式所做的Cygwin64 Terminal )。

另一種方法是首先在Windows中設置環境變量。

  • [不是OP的選項] 如果環境變量應始終具有相同的值,請按如下所示永久設置:運行sysdm.cpl ,轉到“ Advanced選項卡,單擊“ Environment Variables...並根據需要定義變量MSYSTEM

  • 要定義變量ad-hoc ,請按如下所示創建批處理文件,並使批處理文件的快捷方式目標:

     @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腳本,如我的這個答案所示 ,可以防止這種情況。

您應該能夠像在命令提示符中那樣執行相同操作。 因此,您可以這樣做:

set VAR=VarContents

雖然我已經接受了上面的答案,但我發現這個鏈接專門解決了我的問題的第二部分(特定於Mintty)或者在運行命令之前設置環境變量的另一種方法。

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

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

Mintty Tips建議設置環境變量 。)

暫無
暫無

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

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