Bagaimana cara memperbaiki kesalahan "bukan pengidentifikasi yang valid" setelah menetapkan variabel lingkungan?

12

Saya mencoba men-setup cocos2dx di Ubuntu 14.04 LTS tetapi setelah mengatur variabel lingkungan (in .bashrc) saya mulai mendapatkan kesalahan ini:

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

Dan saya tidak tahu apa yang harus saya lakukan untuk memperbaikinya.

Carlos Campos
sumber
1
Anda harus menunjukkan dengan tepat bagaimana Anda mengatur variabel.
glenn jackman

Jawaban:

16

tapi setelah mengatur variabel lingkungan

Sepertinya Anda tidak melakukannya dengan benar.

Kesalahan yang Anda dapatkan berarti bahwa path (seperti /home/john/android) digunakan sebagai nama variabel, bukan sebagai nilai yang diberikan kepada mereka.

  • Sintaks yang benar untuk menetapkan variabel adalah NAME=value.
  • Sintaks yang benar untuk mengekspor variabel (dengan nilai apa pun, jika ada, sudah ditetapkan) adalah export NAME.
  • Sintaks yang benar untuk menetapkan dan mengekspor variabel (dengan nilai yang ditetapkan) secara bersamaan adalah export NAME=value.

Saya curiga Anda mencoba melakukan hal ketiga tetapi menggunakan sintaks yang salah. Lima kesalahan umum yang dapat menghasilkan kesalahan seperti yang Anda lihat adalah:

  1. Menggunakan spasi alih-alih =. export NAME valuesalah; valuekemudian diartikan sebagai nama variabel berikutnya yang akan diekspor.

    (Hal ini terjadi karena export NAME1 NAME2 adalah sintaks yang benar untuk mengekspor beberapa variabel.)

  2. Menempatkan ruang di sekitar =. Dalam banyak bahasa pemrograman, ini berlaku dan lebih disukai gaya untuk pad operator dengan spasi sebagian besar waktu. Tetapi untuk menetapkan nilai ke variabel dalam skrip shell (atau situasi lain di mana Anda mengeluarkan perintah shell), ini tidak diizinkan. NAME = value(dalam exportperintah atau sebaliknya) tidak akan berfungsi; kamu harus menggunakan NAME=value.

    ( export NAME = valueMencoba untuk mengekspor variabel bernama NAME,, =dan value. Untungnya ini tidak pernah muncul untuk berhasil secara diam-diam karena mencoba untuk mengekspor variabel yang dipanggil =adalah kesalahan sintaksis. Sebaliknya export NAME= valueakan terlihat berfungsi, tetapi tidak menetapkan value- NAMEtetapi, ia memberikan yang kosong, string nol-panjang ke NAMEdan mengekspornya, dan secara terpisah mengekspor variabel value. Keduanya kesalahan umum.)

  3. Memisahkan bagian dari nilai variabel dengan spasi. Variabel lingkungan dapat berisi spasi, tetapi dalam praktiknya jarang digunakan sebagai pemisah lapangan dalam variabel lingkungan. Ketika satu variabel sengaja berisi beberapa jalur, biasanya :digunakan untuk memisahkannya.

  4. Tidak mengutip spasi ketika menetapkan variabel. Terkadang nilai variabel lingkungan seharusnya berisi spasi. Misalnya, itu mungkin nama direktori yang benar-benar berisi spasi. Dalam hal ini, perlu mengutip ruang apa pun.

    Salah satu cara untuk melakukan ini adalah dengan mendahului mereka \. Lihat Bagaimana saya bisa melindungi tanda kurung yang diteruskan ke perintah cd? dan Tidak dapat menghapus file untuk informasi tentang cara lain - metode yang disajikan dalam jawaban berlaku, meskipun tidak ada pertanyaan yang secara khusus tentang penetapan ke variabel lingkungan.

    Misalnya, berikut adalah beberapa cara untuk mengekspor variabel lingkungan SILLYPATHdengan nilainya /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"

    Sering kali ketika folder yang harus Anda gunakan dalam shell atau menetapkan ke variabel lingkungan yang banyak digunakan berisi ruang, itu mungkin mendapat manfaat dari diganti namanya. (Tapi terkadang itu tidak praktis atau tidak diinginkan.)

  5. Menetapkan dan / atau mengekspor variabel ketika tidak ada yang harus dilakukan sama sekali. Ini semacam kesalahan meta; masalah teknis spesifik seringkali merupakan salah satu dari yang di atas, tetapi solusinya adalah dengan menyingkirkan jalur yang menyinggung, atau beberapa bagian darinya, daripada memperbaikinya. Jangan sembarangan menghapus kode dari .bashrc, tentu saja. Tetapi sebuah exportmungkin telah ditambahkan secara tidak sengaja, atau mungkin secara tidak sengaja memiliki lebih banyak kode di dalamnya daripada yang dimaksudkan. Misalnya, Anda bermaksud menulis:

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

    Itu akan ditambahkan .bashrc, lalu sumber ulang. Tapi misalkan Anda malah menulis:

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

    Maka exportperintah Anda tidak hanya akan mengekspor nilai augmented PATH, tetapi juga akan mencoba untuk mengekspor variabel bernama .dan , yang bukan yang Anda inginkan. Karena mengandung karakter yang dilarang dalam nama variabel, jadi Anda akan mendapatkan kesalahan setiap kali Anda memulai shell pesta interaktif baru./home/your-username/.bashrc

    Untuk menghindari masalah ini, saya sarankan mengedit .bashrcdi editor (misalnya nano ~/.bashrc,, gedit ~/.bashrc) daripada mengarahkan kembali ke akhir dengan >>.

Saya menduga ini mungkin informasi yang cukup bagi Anda untuk menemukan dan memperbaiki bug di .bashrcfile Anda . Jika Anda memerlukan bantuan lebih lanjut, tentu saja Anda harus memposting konten lengkap file itu untuk dianalisis. (Hanya kebetulan bahwa masalah Anda kebetulan cukup sering ditemui, dan dengan pesan kesalahan yang cukup transparan, untuk membuat jawaban umum seperti ini menjadi mungkin.)

Eliah Kagan
sumber
2
Terima kasih! Jawaban yang sangat terperinci. Dalam kasus saya menempatkan ruang sekitar = adalah masalahnya. Saya berjuang dengan ini untuk sementara waktu.
Rengas
5

Pastikan Anda menjalankan:

export ENV_VARIABLE

Daripada:

export $ENV_VARIABLE

Kalau tidak, Anda mencoba untuk mengekspor nilai variabel daripada variabel itu sendiri, sehingga Anda akan mendapatkan kesalahan ini.

Lambda Pi Omega
sumber
1

Hilangkan spasi dan tanda dolar. Misalnya ini bekerja dengan cara yang sama Anda dapat mengatur modul pengaturan Django pada server web melalui SSH yaitu:

export DJANGO_SETTINGS_MODULE=myapp.settings
Patrick Mutuku
sumber
0

Saya telah melihat ini terjadi cukup sering ketika Anda menyalin sesuatu dengan koma terbalik (dari web) dan memperbarui lingkungan Anda atau file bashrc.

Tempat yang baik untuk memulai adalah dengan mengetikkan secara manual koma terbalik pada konten yang disisipkan.

Gaurav Bhatnagar
sumber