Ortam değişkenlerini nasıl eklerim?


364

Ubuntu 11.04 kullanıyorum. Bir bash oturumu başlatmak için terminali kullanıyorum ve bir ortam değişkeni eklemek istiyorum:

$r@hajt:~$ env THEVAR=/example

Ama işe yaramıyor. TheVAR ile değişkenlerin sonuncusu olduğunu gösterir, ancak başka bir çağrı artık hiçbir şey envgöstermez .THEVARenv | grep THEVAR

Benzer şekilde, export ( export THEVAR=/example) veya diğer değişken atamalarına ( THEVAR=/example) sahip komut dosyaları ortam değişkenini eklemez.

Yanlış bir şey yaptığımı biliyorum, basit bir şey olması gerektiğini biliyorum, ama ne olduğunu bulamıyorum.

GÜNCELLEME: Sorumun gerçek anlamı şuydu: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Her neyse, en çok oyu alan cevabı seçeceğim ve düzenlenen başlığı bırakacağım.

env Bir programı değiştirilmiş bir ortamda çalıştırır, daha sonra tüm değişiklikleri reddeder.


1
.Bashrc dosyasında tanımlandığında / dışa aktarıldığında düzgün çalışır.
huysuzluk


1
Nasıl hakkında THEVAR=/example?
Oleh Prypin

2
Diğeri global değişkenlerle ilgilidir, bu böyle bir sınırlama getirmez. Ayrı tutardım.
Lekensteyn

Yanıtlar:


570

Değişkeni yalnızca geçerli kabuk için ayarlamak için:

VARNAME="my value"

Geçerli kabuk için ve mevcut kabuktan başlatılan tüm işlemler için ayarlamak için :

export VARNAME="my value"      # shorter, less portable version

Gelecekteki tüm bash oturumları için kalıcı olarak ayarlamak için .bashrc, $HOMEdizine dizine bu satırı ekleyin .

Kalıcı olarak ayarlamak ve sistem genelinde (tüm kullanıcılar, tüm işlemler) / etc / environment içine set değişkenini ekleyin:

sudo -H gedit /etc/environment

Bu dosya sadece aşağıdakiler gibi değişken atamaları kabul eder:

VARNAME="my value"

exportAnahtar kelimeyi burada kullanmayın .

Geçerli kullanıcı oturumunu kapatıp tekrar giriş yapmanız gerekiyor, böylece ortam değişkenleri değişebilir.


29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot

1
@ Mr.Hyde evet, muhtemelen makul bir yer
Michał Šrajer

1
@ BaharadwajRaju, çünkü bazı eski UNIX sistemlerinde, yalnızca önceden ayarlanmış bir değişkeni dışa aktarabilirsiniz. Eski Solaris ve HP-UX.
Michał Šrajer

1
Ortam değişkenini ayarladıktan sonra, ayarlandığından emin olmak için nasıl hızlıca görüntüleyebilirim?
Rod

1
@Rodecho $myvar
Qwerty

29

Bir ortam değişkenini bir kez ayarlamak için exportkomut isteminde bir kabuk komut dosyasında değil , komut istemini kullanın :

$ export THEVAR=/example

Değişken, kabuk oturumunun geri kalanı için veya ayarlanmadan önce ayarlanacaktır.

Her zaman bir ortam değişkeni ayarlamak için export, .bashrcdosyadaki komutu (veya kabuğunuz için uygun başlatma dosyasını) kullanın.

Bir komut dosyasından bir ortam değişkeni ayarlamak için komut dosyasındaki exportkomutu ve sonra sourcekomut dosyasını kullanın. Eğer betiği çalıştırırsanız çalışmaz.

Kaynak sağlama ve yürütme arasındaki farkın açıklaması için bu cevaba bakınız: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- bash-script / 176788 # 176788


4
Sadece betiği çalıştırarak nasıl çalışmasını sağlayabilirim? Kaynak olmadan.
Mithril

19

Ubuntu'da kalıcı olarak yeni bir ortam değişkeni eklemek için (yalnızca 14.04'te test edilmiştir), aşağıdaki adımları kullanın:

  1. Bir terminal aç (tuşuna basarak CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Şifrenizi giriniz
  4. Yeni açılan metin dosyasını düzenleyin:
    örneğin eklemek istiyorsanız FOO=bar, sonra FOO=baryeni bir satıra yazın
  5. Onu kurtar
  6. Kaydettikten sonra çıkış yapın ve tekrar giriş yapın.
  7. Gerekli değişiklikler yapıldı.

5
Hakkındaki daha tehlikeli bitleri kaldırarak cevabınızı temizledim sudo gedit(Bkz. Askubuntu.com/questions/270006/… ) ve chmod 777. Sonuncusu asla bir sistem yapılandırma dosyasında yapılmamalıdır.
muru

Bu, belirli durumlar için doğru bir cevaptır. Tüm oturumlar, kullanıcı kabuğu oturumları olsun veya olmasın, burada ayarlanan değişkenlerin değerini alır. Bu bir kabuk betiği gibi görünse de, önemli değil - yalnızca çevre değişkenlerini ayarlamanıza olanak tanır ( ifya da gibi kabuk işlevlerini kullanarak test)
Tom Harrison Jr

Eğer çubuk bir dizge ise, tırnak işaretleri arasına koymalı mıyım? Gibi Foo="bar"mi?
blue_chip

@blue_chip Hayır, tırnak işaretleri olmadan çalışır.
17’de

4
çevre değişkenleri için @blue_chip, her şey bir dizedir. Sadece boşluk içerdiğinde tırnak gerekir.
Ruslan

8

Ortamın / var değişikliklerinin komut dosyası tamamlandıktan sonra devam etmesini sağlamak source ./script.shiçin, kaynak için "", ". ./script.sh

Kaynak, komut dosyasındaki komutları, sanki onları girmişsiniz gibi uygular ... bu yüzden komut dosyasının bir yönünü değiştirir, örneğin komut dosyası bir şeyi kontrol ederse ve yanlışsa çıkmaya karar verirse, arayarak exit 0, mevcut terminal / kabuk oturumunuzu sonlandırır.


Bu, çoktan kabul edilmiş bir cevabı ve birkaç sorusu daha var olan çok eski bir sorudur. Lütfen daha yeni soruları cevaplamayı düşünün lütfen ...
NerdOfCode 16:18

3
@NerdOfCode bu cevabı hala ilgili olan bir sorunu ele alır ve kabul edilenler de dahil olmak üzere diğer cevapların hiçbiri, görebildiğim kadarıyla söylemez ... Aslında eski sorulara iyi cevaplar vermek için iki rozet vardır bu yüzden bu teşvik edilir
Zanna

1
Tam olarak aradığım şey buydu. Koddan dışa aktarılan değişkenleri komut dosyasından görmem gerekiyordu.
albanx

5

Senaryo üzerinden bir şeyler yapıyorsanız, ortam değişkenini kalıcı olarak ayarlamanın kolay bir yolu, betiğinizdeki ifadenin altına koymaktır.

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Pwd gibi ifadeleri değerlendirmeniz gerekirse, örneğin,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1

Çok geç olduğunu biliyorum, ancak tüm kullanıcılar için bir ortam değişkeni eklemek istiyorsanız (örn. JAVA kullanımı) - şunları yapabilirsiniz:

1) Nano'yu /etc/bash.bashrckullanarak açın (ne tür bir editör kullanıyorsanız kullanın, kullanıcı dostu olma konusunda en kötüsü VIM'i tercih etmem - kişisel değil).

2) Dosyaya ekle:

export VAR=path export PATH=$PATH:/bin 3) (Kutuyu zıplatabilirseniz daha iyidir) - veya yeni bir SSH oturumu açın ve `env 'komutunu kullanarak onaylayın.

AMA Eğer her kullanıcının bunun için ayrı bir ayarı olmasını istiyorsanız, .bashrcdosyada değişiklik yapmak (komut dosyası) yapmak zorundasınız ~/.bashrc(ya /home/$USER/da Linux sistemlerinde yeniyseniz)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.