Bir kullanıcı ortamı değişkenini nasıl ayarlarım? (kalıcı olarak oturum değil)


145

Bu beni rahatsız ediyor. Birkaç öneri (hepsi farklı dosyalar ve sözdizimi kullanarak) gördüm ve hiçbiri işe yaramadı.

Belirli bir kullanıcı için bir ortam değişkenini nasıl ayarlarım? Ben Debian’ın sıkışıklığındayım. ABC = "123" yapmak için dosyaya girmem gereken tam sözdizimi nedir?


7
Ne denedin zaten?
l0b0

1
düzenleme .bashrc, .bash_profile, .profile ve .ssh / eviroment. Gerçi doğru yerde mi yazdım, yoksa her zaman doğru sözdizimine sahip olup olmadığımı bilmeme rağmen

4
.bashrcBunun için ana yer.
rozcietrzewiacz

@ rozcietrzewiacz: tamam ama ... çözüme ulaştıktan sonra bile bu dosyanın başında ve sonunda ABC1 ve ABC2'yi ayarlamaya çalıştım ve ortamımda ayarlanmadı.

1
Bunun .bash_profilegibi bir şey içerdiğini kontrol edin [[ -f ~/.bashrc ]] && . ~/.bashrc.
rozcietrzewiacz 28:11

Yanıtlar:


113

Beyanı, kabuğunuzun başlangıç ​​dosyalarına koymak zorundasınız:

  • Bash, kül, ksh veya başka bir Bourne tarzı kabuk kullanıyorsanız,

    ABC="123"; export ABC
    

    senin içinde .profiledosya ( ${HOME}/.profile). Bu, çoğu Unix kurulumunda ve özellikle Debian'da varsayılan durumdur.

    Giriş kabuğunuz bash ise, .bash_profile( ${HOME}/.bash_profile) veya .bash_loginyerine kullanabilirsiniz.

    Not: Bu dosyalardan herhangi biri varsa ve oturum açma kabuğunuz bash ise .profile, ssh üzerinden veya bir metin konsolunda oturum açtığınızda okunmaz, ancak GUI'den giriş yapmak yerine yine de okunabilir .bash_profile. Ayrıca, eğer yoksa .bash_profile, o zaman kullanın .bashrc.

  • Zsh'yi giriş kabuğu olarak ayarladıysanız, ~/.zprofileyerine kullanın ~/.profile.

  • Tcsh kullanıyorsanız,

    setenv ABC "123"
    

    içinde .logindosya ( ${HOME}/.login)

  • Başka bir kabuk kullanıyorsanız, kabuk değişkenlerine, ortam değişkenlerinin nasıl tanımlanacağını ve kabuk başlangıcında hangi dosyaların yürütüldüğünü öğrenin.


5
Varsayılan davranış, su userçağrılan kullanıcının ana dizinini ve ortamını korurken, geçerli kabuğun sahipliğini kullanıcı adı argümanına değiştirmektir. Yeni bir kullanıcı olacak şekilde bir kabuk girmek ve tüm çevresel ayarlarını ($ PATH, $ HOME, $ ABC, vb.) Elde etmek için a - su için ilk argüman olarak geçmeniz gerekir. su - usernamene istediğini başaracaksın.
Tim Kennedy

1
Bekle: "Köke çıkmak" ile ne demek istiyorsun? Bir 'su' yapma Her durumda yok değil kabuk başlatın. 'Su -' (bkz. man su)
Matteo,

1
Neden suilk etapta? Sadece .profilekullanıcı tarafından kullanılamayan bir kök sahiplik oluşturmadınız mı?
rozcietrzewiacz 28:11

1
@ asit bu yapmalıydı budur . Sorusu Giriş yaptığınızda kaynaklı ne olduğunu., Kontrol giriş yapmak dışarı ilk.
rozcietrzewiacz

7
Çünkü .profilebütün Bourne uyumlu kabukları tarafından okunur, o dosyada Bash sözdizimi yazma olmamalıdır. Özellikle, export VARIABLE=valueyeniden biçimlendirilmesi gerekir VARIABLE=value; export VARIABLE.
üçlü

48

/etc/environmentOrtam değişkenlerini ayarlamak için dosya kullanın . Sonra /etc/environmentdosyanın içine aşağıdaki satırı ekleyin .

ABC="123"

Şimdi, ABC değişkenine tüm kullanıcı oturumlarından erişilebilir. Değişken çıkışı test etmek için önce komutunu kullanarak ortam değişkenini yenileyin.

source /etc/environment

ve koş echo $ABC.


4
Kaynak komutu için +1. Bütün cevaplarda eksikti
Nerrve

5
/etc/environmentKesin olarak çözdüğüm bir şeyin tam bash sözdizimini desteklememesine dikkat edin . Örneğin, aşağıdaki çizgiyi koymak PATH="/usr/bin:/usr/sbin"ve sonra PATH="$PATH:/foo/bar"çalışmak işe yaramaz
user2428118

Bunun kişisel bir sorun olup olmadığından emin değil, ancak /etc/environmentbash terminalini yeniden başlattıysam veya yazsam bile, işletim sistemimi yeniden başlatmam gerekiyordu source /etc/environment. Bu nedenle, ortam değişkeninin sürekliliği olmayan sorunlarla karşılaşıyorsanız, yeniden başlatmayı deneyin.
Blairg23

9

Bu hemen hemen herhangi bir kabuk için kullanabileceğiniz genel bir işlemdir. Her durumda, kullanıcının normal olarak hangi kabuğu kullandığını bilmeniz gerekir:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

O zaman bu kabuğun hangi nokta dosyalarını normalde okuyacağını bulmak zorundasınız:

man $shell

İşe yarayabilecek bir kısayol, kabuk adını içeren nokta dosyalarını listelemektir:

ls ~/.*${shell}*

Oturum açma sırasında dosyalardan birinin gerçekten okunup okunmadığını kontrol etmek istiyorsanız, her birinin dosya adını yazdırabilirsiniz, örneğin:

echo .bashrc

Giriş yaparken, hangi dosyaların okunmakta olduğunu görmelisiniz ve hangisinin değiştirileceğine karar verebilirsiniz. Kullanmamaya echo "$0"ya da benzeri bir şey yapmamanız gerektiğine dikkat edin , çünkü $0kabuğun değeri nokta dosyalarını nasıl işler ve yanıltıcı olabilir.

"Kalıcı" değişkeni bildirmek söz konusu olduğunda, bunun yalnızca oturuma uzandığını unutmayın. Bir değişkenin değerine bir oturum olmadan erişmenin bir yolu yoktur, bu nedenle birinin dışında bir anlamı yoktur. Eğer "salt okunur" demek istiyorsan, bu kabuk bağımlıdır ve Bash'de kullanabilirsin:

declare -r VAR

Zaten bir değeri varsa veya

declare -r VAR=value

aynı anda atamak için. Tüm kabukları bu özelliğe sahip değildir.

Çoğu kabuktaki bir değişkeni bildirmek için, bir değişken adı ( [A-Za-z_][A-Za-z0-9_]*) kullanmalı, ardından eşit bir işaret (ve eşit işaretin etrafında boşluk olmamalıdır ), sonra bir değer (tercihen değer basit olmadığı sürece kote [A-Za-z0-9_]+) kullanmalısınız. Örneğin:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1

5

İhracat kullanın.

export ABC="123"

Ayarlanmış olup olmadığını kontrol etmek için

env

ve / veya

env | grep ABC

Kalıcı olarak eklemek için bunu ~/.bashrcdosyanıza ekleyin .

export ABC="123"

6
Kalıcı olarak tanımlamayı , yani tanımı hangi dosyanın içine koyacağını sıcak bilmek istiyor .
Matteo,

1
Çalışmıyor. Oturumu kapattıktan sonra değişken gitti. Oturumlar arasında ihtiyacım var

1
demek istediğin permenateve değil permenently: D
whoami

düzenleme için bakbashrc
whoami 28:11

5
neyin permenate? demek permanentistiyorsun
SSH Bu

3

Tam komut:

echo 'export ABC = "123"' >> ~/.profile

4
Kesinlikle? Ciddi anlamda? Hangi kabuk (a) okur ~/.profileve (b) öncesi ve sonrası boşluk sağlar =?
G-Man

1

İşe yarayan en iyi yol, BASH kabuğundaki .bashrc dosyasını değiştirmektir.

örneğin bunu kullanın:

  1. .bashrc dosyanızı açın
  2. bu satırı ekle:

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    Örneğin : export HOME = "/home/user/"

    ""Kullanmak ' 'işe yaramayacak gibi kullanacağınızı ve kaynak bulma işleminde bashrc dosyanızın hata bildireceğini unutmayın.

  3. Geçerli oturumda kaynak.

Ayrıca / etc / environment dosyasını değiştirmeye çalıştım, ancak yeni bir ortam değişkeni yaratmama izin vermedi ve kaynak olduğunda, tanımlanmış değişkenin bulunamadığı konusunda hata verdi.

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.