Làm cách nào để khắc phục lỗi không phải là lỗi định danh hợp lệ, sau khi cài đặt các biến môi trường?


12

Tôi đang cố gắng thiết lập cocos2dx trong Ubuntu 14.04 LTS nhưng sau khi đặt các biến môi trường (in .bashrc), tôi bắt đầu gặp lỗi này:

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

Và tôi không biết phải làm gì để khắc phục nó.


1
Bạn sẽ phải chỉ ra chính xác cách bạn thiết lập các biến.
glenn jackman

Câu trả lời:


16

nhưng sau khi thiết lập các biến môi trường

Có vẻ như bạn đã không làm điều đó một cách chính xác.

Các lỗi bạn nhận được có nghĩa là các đường dẫn (như /home/john/android) đang được sử dụng làm tên của các biến, thay vì các giá trị được gán cho chúng.

  • Cú pháp đúng để gán một biến là NAME=value.
  • Cú pháp đúng để xuất một biến (với bất kỳ giá trị nào, nếu có, nó đã được gán) là export NAME.
  • Cú pháp đúng để gán và xuất một biến (với giá trị được gán) cùng một lúc là export NAME=value.

Tôi nghi ngờ bạn đang cố gắng làm điều thứ ba nhưng sử dụng cú pháp sai. Năm lỗi phổ biến có thể tạo ra lỗi như những gì bạn đang thấy là:

  1. Sử dụng không gian thay vì =. export NAME valuelà không chính xác; valuesau đó được hiểu là tên của một biến tiếp theo cần xuất.

    (Điều này xảy ra vì export NAME1 NAME2 cú pháp đúng để xuất nhiều biến.)

  2. Đặt không gian xung quanh =. Trong nhiều ngôn ngữ lập trình, hầu hết thời gian đều hợp lệ và được ưa thích đối với các nhà khai thác pad với không gian. Nhưng để gán giá trị cho một biến trong tập lệnh shell (hoặc tình huống khác nơi bạn đang phát lệnh shell), điều này không được phép. NAME = value(trong một exportlệnh hoặc cách khác) sẽ không hoạt động; bạn phải sử dụng NAME=value.

    ( export NAME = valuecố gắng xuất các biến có tên NAME, =value. May mắn thay, điều này dường như không bao giờ thành công trong âm thầm vì cố gắng xuất một biến được gọi =là lỗi cú pháp. Ngược lại export NAME= valuesẽ xuất hiện để hoạt động, nhưng không gán valuecho NAME--instead, nó gán trống, Chuỗi có độ dài bằng không NAMEvà xuất nó và xuất riêng biến value. Cả hai đều là những lỗi phổ biến.)

  3. Tách các phần của giá trị của biến với khoảng trắng. Biến môi trường có thể chứa khoảng trắng, nhưng trong thực tế, chúng hiếm khi được sử dụng làm dấu tách trường trong biến môi trường. Khi một biến duy nhất cố ý chứa nhiều đường dẫn, thường :được sử dụng để phân tách chúng.

  4. Không trích dẫn khoảng trắng khi gán cho biến. Đôi khi, giá trị của biến môi trường được cho là chứa khoảng trắng. Ví dụ, nó có thể là tên của một thư mục thực sự chứa một khoảng trắng. Trong trường hợp đó, cần trích dẫn bất kỳ khoảng trắng nào.

    Một cách để làm điều này là đi trước họ với \. Xem Làm thế nào tôi có thể bảo vệ dấu ngoặc đơn được truyền cho lệnh cd? Không thể xóa tệp để biết thông tin theo các cách khác - các phương pháp được trình bày trong câu trả lời được áp dụng, mặc dù không có câu hỏi nào cụ thể về việc gán cho các biến môi trường.

    Ví dụ, đây là một vài cách để xuất biến môi trường SILLYPATHvới giá trị /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"

    Thông thường khi một thư mục mà bạn phải sử dụng trong shell hoặc gán cho biến môi trường được sử dụng rộng rãi có chứa một khoảng trắng, nó có thể được lợi từ việc đổi tên. (Nhưng đôi khi điều đó không thực tế hoặc không mong muốn.)

  5. Chỉ định và / hoặc xuất một biến khi không có gì phải làm cả. Đây là một loại sai lầm meta; vấn đề kỹ thuật cụ thể thường là một trong những vấn đề trên, nhưng giải pháp là loại bỏ đường dây vi phạm, hoặc một phần của nó, thay vì khắc phục nó. Tất nhiên, đừng loại bỏ mã một cách bừa bãi .bashrc. Nhưng một cái exportcó thể đã vô tình được thêm vào, hoặc có thể vô tình có nhiều mã trong đó hơn dự định. Ví dụ: giả sử bạn muốn viết:

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

    Điều đó sẽ nối vào .bashrc, sau đó lấy lại nguồn. Nhưng giả sử thay vì bạn đã viết:

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

    Sau đó, exportlệnh của bạn sẽ không chỉ xuất một giá trị tăng thêm PATH, mà còn cố gắng xuất các biến có tên .và , đó không phải là điều bạn muốn. Vì chúng chứa các ký tự bị cấm trong các tên biến, do đó bạn sẽ gặp lỗi mỗi khi bạn bắt đầu một bash shell tương tác mới./home/your-username/.bashrc

    Để tránh vấn đề này, tôi khuyên bạn nên chỉnh sửa .bashrctrong một biên tập viên (ví dụ nano ~/.bashrc, gedit ~/.bashrc) chứ không phải là chuyển hướng đầu ra đến phần cuối của nó với >>.

Tôi nghi ngờ đây có thể là đủ thông tin để bạn tìm và sửa lỗi trong .bashrctệp của mình . Nếu bạn cần trợ giúp thêm, tất nhiên bạn nên đăng toàn bộ nội dung của tệp đó để phân tích. (Chỉ là ngẫu nhiên mà vấn đề của bạn xảy ra là một vấn đề thường xuyên gặp phải và với thông báo lỗi đủ minh bạch, để đưa ra câu trả lời chung chung như thế này.)


2
Cảm ơn bạn! Như một câu trả lời chi tiết. Trong trường hợp của tôi đặt không gian xung quanh = là vấn đề. Tôi đã vật lộn với điều này trong một thời gian.
Rengas

5

Đảm bảo rằng bạn đang chạy:

export ENV_VARIABLE

Thay vì:

export $ENV_VARIABLE

Mặt khác, bạn đang cố gắng xuất giá trị của biến chứ không phải chính biến đó, vì vậy bạn sẽ gặp lỗi này.


1

Loại bỏ không gian và ký hiệu đô la. Chẳng hạn, nó hoạt động giống như cách bạn có thể đặt mô-đun cài đặt django trên máy chủ web thông qua SSH tức là:

export DJANGO_SETTINGS_MODULE=myapp.settings

0

Tôi đã thấy điều này xảy ra khá thường xuyên khi bạn sao chép một cái gì đó bằng dấu phẩy đảo ngược (từ web) và cập nhật môi trường hoặc tệp bashrc của bạn.

Một nơi tốt để bắt đầu sẽ chỉ là nhập thủ công các dấu phẩy đảo ngược trong nội dung được dán.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.