Ortam değişkenlerini ayarladıktan sonra “geçerli bir tanımlayıcı değil” hatası nasıl düzeltilir?


12

Ubuntu 14.04 LTS cocos2dx kurmaya çalışıyorum ama çevresel değişkenler (in .bashrc) ayarladıktan sonra ben bu hatayı almaya başlayın:

bash: export: dev/cocos2d-x-3.2/tools/cocos2d-console/bin': not a valid identifier 
bash: export:/home/john/android': not a valid identifier 
bash: export: dev/android-ndk-r10b': not a valid identifier 
bash: export:dev/adt-bundle-linux-x86_64-20140702/sdk': not a valid identifier

Ve bunu düzeltmek için ne yapacağımı bilmiyorum.


1
Değişkenleri tam olarak nasıl ayarladığınızı göstermeniz gerekir.
glenn jackman

Yanıtlar:


17

ancak çevresel değişkenleri ayarladıktan sonra

Bunu doğru şekilde yapmadığınız anlaşılıyor.

Aldığınız hatalar, yolların (gibi /home/john/android) kendilerine atanan değerler yerine değişkenlerin adları olarak kullanıldığı anlamına gelir .

  • Değişken atamak için doğru sözdizimi NAME=value.
  • Bir değişkeni dışa aktarmak için doğru sözdizimi (varsa, zaten atanmış olan herhangi bir değerle) export NAME.
  • Bir değişkeni (atanmış değerle) aynı anda atamak ve vermek için doğru sözdizimi export NAME=value.

Üçüncü şeyi yapmaya çalıştığınızı fakat yanlış sözdizimi kullandığınızı sanıyorum. Gördüğünüz gibi hatalar üretebilecek beş yaygın hata şunlardır:

  1. Bunun yerine boşluk kullanmak =. export NAME valueyanlış; valuedaha sonra dışa aktarılacak bir sonraki değişkenin adı olarak yorumlanır.

    (Bunun nedeni export NAME1 NAME2 , birden çok değişkeni dışa aktarmak için doğru sözdizimi olmasıdır.)

  2. Etrafa boşluklar koymak =. Birçok programlama dilinde, çoğu zaman boşluklu ped operatörleri için hem geçerli hem de stilistik olarak tercih edilir. Ancak kabuk betiğindeki bir değişkene (veya kabuk komutları verdiğiniz başka bir duruma) değer atamak için buna izin verilmez. NAME = value(bir exportkomutta veya başka bir şekilde) çalışmaz; kullanmalısın NAME=value.

    ( export NAME = valueİhracat değişkenlere çalışır adında NAME, =ve value. Neyse bu adlı bir değişken ihraç etmeye teşebbüs sessizce çünkü başarılı olması için görünür asla =aksine. Bir yazım hatasıdır export NAME= valueişe görünecektir, ancak atama yapmaz valueetmek NAME, boş atar, --instead sıfır uzunluklu dizgiye NAMEve dışa aktarır ve değişkeni ayrı olarak dışa aktarır value. Her ikisi de yaygın hatalardır.)

  3. Değişken değerinin bölümlerini boşluklarla ayırmak. Ortam değişkenleri olabilir boşluk içermemelidir, ama pratikte nadiren ortam değişkenleri alan ayırıcı olarak kullanılır. Tek bir değişken kasıtlı olarak birden çok yol içerdiğinde, genellikle :bunları ayırmak için kullanılır.

  4. Değişkenlere atanırken boşluklar belirtilmez. Bazen bir ortam değişkeninin değerinin boşluk içerdiği varsayılır. Örneğin, gerçekten boşluk içeren bir dizinin adı olabilir. Bu durumda, herhangi bir boşluk alıntılamak gerekir.

    Bunu yapmanın bir yolu onlardan önce gelmektir \. Bkz . Bir cd komutuna aktarılan parantezleri nasıl koruyabilirim? ve Diğer yollarla ilgili bilgi için dosya silinemiyor - her iki soru da özellikle ortam değişkenlerine atama ile ilgili olmasa da, cevaplarda sunulan yöntemler geçerlidir.

    Örneğin, ortam değişkenini SILLYPATHşu değerle vermenin birkaç yolu şunlardır /home/ek/silly name/bin:

    export SILLYPATH=/home/ek/silly\ name/bin
    export SILLYPATH='/home/ek/silly name/bin'
    export SILLYPATH="/home/ek/silly name/bin"

    Genellikle bir kabukta kullanmanız veya yaygın olarak kullanılan bir ortam değişkenine atamanız gereken bir klasör boşluk içerdiğinde, yeniden adlandırılmasından yararlanabilir. (Ama bazen bu pratik veya istenmeyen bir durumdur.)

  5. Hiçbir şey yapılması gerekmediğinde bir değişken atama ve / veya dışa aktarma. Bu bir tür meta-hatadır; belirli teknik sorun genellikle yukarıdakilerden biridir, ancak çözüm, düzeltmek yerine rahatsız edici çizgiden veya bir kısmından kurtulmaktır. .bashrcElbette kodu rastgele ayırmayın . Ancak, exportyanlışlıkla bir eklenmiş olabilir veya istemeden daha fazla kod içerebilir. Örneğin, şunu yazmak istediğinizi varsayalım:

    echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc

    Bu eklenir .bashrc, sonra yeniden kaynaklanır. Ancak bunun yerine şunu yazdığınızı varsayalım:

    echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc  # WRONG!

    Ardından exportkomutunuz yalnızca artırılmış bir değerini dışa aktarmaz PATH, aynı zamanda .ve adında değişkenleri dışa aktarmaya çalışır . Değişken adlarında yasaklanmış karakterler içerdiğinden, her yeni etkileşimli bash kabuğuna başladığınızda bir hata alırsınız./home/your-username/.bashrc

    Bu sorunu önlemek için, çıktıyı sonuna yönlendirmek yerine .bashrcbir düzenleyicide (ör. nano ~/.bashrc, gedit ~/.bashrc) Düzenlemenizi öneririm >>.

Bunun, .bashrcdosyanızdaki hatayı bulup düzeltmeniz için yeterli bilgi olabileceğinden şüpheleniyorum . Daha fazla yardıma ihtiyacınız olursa, elbette bu dosyanın tüm içeriğini analiz için göndermelisiniz. (Ancak bununla ilgili genel bir cevap vermek için probleminizin yeterince sık karşılaşılan ve yeterince şeffaf bir hata mesajı ile karşılaşması tesadüfen gerçekleşir.)


2
Teşekkür ederim! Böyle ayrıntılı bir cevap. Benim durumumda boşluk bırakmak = sorun oldu. Bir süredir bununla uğraşıyordum.
Rengas

5

Koştuğunuzdan emin olun:

export ENV_VARIABLE

Ziyade:

export $ENV_VARIABLE

Aksi takdirde, değişkenin kendisi yerine değişkenin değerini dışa aktarmaya çalışıyorsunuz, bu nedenle bu hatayı alacaksınız.


1

Boşlukları ve dolar işaretini ortadan kaldırın . Örneğin bu, bir web sunucusunda SSH yoluyla bir django ayarları modülü ayarlayabileceğiniz şekilde çalışır.

export DJANGO_SETTINGS_MODULE=myapp.settings

0

Ters çevrilmiş virgüllerle (web'den) bir şey kopyaladığınızda ve ortamlarınızı veya bashrc dosyanızı güncellediğinizde bunun oldukça sık görüldüğünü gördüm.

Başlamak için iyi bir yer, yapıştırılan içeriğe yalnızca ters virgüllerin elle yazılmasıdır.

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.