Điểm:1

lỗi tên biến xấu trên WSL

lá cờ in

Một câu hỏi tương tự đã được hỏi mà không có câu trả lời thỏa mãn. Tôi đã cài đặt kaldi trên WSL và khi chạy một tập lệnh, tôi gặp lỗi này, điều đó chắc chắn phải xảy ra với "Tệp chương trình".

sh: 1: export: Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/ProgramData/Oracle/Java/javapath:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/ c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Chương trình: tên biến không hợp lệ

Một trong những câu trả lời là tạo liên kết "Chương trình" với "Tệp chương trình". Nhưng, nó không thành công: /mnt/c$ sudo ln -s /mnt/c/"Program Files" Chương trình ln: không thể tạo liên kết tượng trưng 'Chương trình' Tạo liên kết bên cửa sổ thành công nhưng không có tác dụng.

user535733 avatar
lá cờ cn
Điều này có trả lời câu hỏi của bạn không? [Tại sao tôi gặp phải lỗi này khi cố gắng thực hiện tập lệnh bash đơn giản này?](https://askubuntu.com/questions/506415/why-i-obtain-this-error-when-i-try-to-perform- this-simple-bash-script)
NotTheDr01ds avatar
lá cờ vn
@ user535733 Đây không giống câu hỏi trùng lặp * chút nào *
muru avatar
lá cờ us
@NotTheDr01ds bạn có chắc không? Ngoài đường dẫn thực tế được sử dụng, lỗi này được lặp lại khá nhiều ở đó.
NotTheDr01ds avatar
lá cờ vn
@muru Tôi đã suy nghĩ nghiêm túc về việc thay đổi hồ sơ của mình thành "Tôi đã sử dụng Linux lâu hơn muru 4 lần, nhưng muru biết nhiều hơn tôi 4 lần về điều đó." (tức là Muru, bạn đá!). Nhưng tôi khá chắc chắn trong trường hợp này rằng câu hỏi được liên kết chỉ có lỗi tương tự. Nguyên nhân đó là do việc sử dụng lệnh `export` rõ ràng là không đúng. Tôi có thể sai, nhưng tôi khá chắc chắn rằng đây là sự cố trích dẫn biến khiến `xuất` không thành công. Tôi chắc rằng chúng ta có thể tìm thấy một câu hỏi khác có thể là một ứng cử viên "trùng lặp" tốt hơn, nhưng các khía cạnh WSL cũng làm cho câu hỏi này trở nên "đặc biệt" hơn một chút.
NotTheDr01ds avatar
lá cờ vn
Có vẻ như thực sự là một bản sao gần như chính xác của [cái này](https://askubuntu.com/q/1215961/1165986), nhưng thực sự cũng không có câu trả lời hay cho câu hỏi đó. Vì OP đã từ bỏ WSL cho Ubuntu "thuần túy", tôi không thấy họ chấp nhận câu trả lời (họ đã nói khá nhiều trong một nhận xét). Vì lý do đó, tôi đề xuất rằng chúng ta nên đóng câu hỏi trước đó để chuyển sang câu hỏi này (hoặc tìm một câu hỏi trùng lặp khác). Điều đó không bình thường, nhưng tôi đã thấy các trường hợp trên các trang web Stack nơi nó được thực hiện vì những lý do như thế này.
Greenonline avatar
lá cờ us
Vui lòng [chỉnh sửa] và cung cấp liên kết đến 'câu hỏi tương tự' để bạn tham khảo trong câu hỏi của mình
Điểm:1
lá cờ vn

Tôi có linh cảm rằng điều này là do thứ gì đó trong tập lệnh hoặc tệp khởi động của bạn gây ra (giả sử ~/.bashrc hoặc ~/.profile) không trích dẫn đúng CON ĐƯỜNG Biến đổi. Vì WSL tự động nối đường dẫn Windows vào đường dẫn WSL, nên nó thêm một số thành phần đường dẫn có "Tệp chương trình", điều này là chính xác.

Nhưng nó yêu cầu trích dẫn biến thích hợp. Kiểm tra tập lệnh của bạn để sử dụng $PATH và trích dẫn nó (hoặc thêm các dòng có khả năng vi phạm vào câu hỏi của bạn nếu bạn cần trợ giúp về điều đó). Nếu bạn không thấy bất kỳ điều gì đáng ngờ trong tập lệnh, thì hãy kiểm tra lại ~/.bashrc~/.profile.

Chỉnh sửa/cập nhật: Tôi khá chắc chắn rằng dòng vi phạm sẽ nằm trong tập lệnh đang được xử lý thông qua dấu gạch ngang (I E. sh). Bash có thể xử lý tốt việc này mà không cần trích dẫn thêm:

> xuất PATH=$PATH:newpath
> tiếng vang $?
0
> tiếng vang $PATH
> # xuất ra ĐƯỜNG đúng, ngay cả với khoảng trắng trong đường dẫn Windows

Tuy nhiên, chạy sh và thử tương tự:

$ xuất PATH=$PATH:đường dẫn mới
sh: 1: xuất: Tệp/NVIDIA: tên biến không hợp lệ
$ xuất PATH="$PATH":đường dẫn mới
$ tiếng vang $?
0
$ tiếng vang $PATH
# xuất ra ĐƯỜNG đúng, ngay cả với khoảng trắng trong đường dẫn Windows

Ngoài ra còn có một giải pháp "băng tần" để tắt tính năng WSL nối thêm đường dẫn Windows vào đường dẫn WSL/Linux. Bạn có thể làm điều này bằng cách tạo (hoặc chỉnh sửa nếu nó đã tồn tại) /etc/wsl.conf và thêm các dòng sau:

[tương tác]
appendWindowsPath=false

Sau đó dừng ví dụ với wsl --chấm dứt Ubuntu (giả sử tên phân phối mặc định) và khởi động lại WSL.

Nó không phải là một tốt giải pháp lâu dài, IMHO, vì việc chạy các ứng dụng Windows (chẳng hạn như VSCode) trở nên khó khăn hơn nhiều khi chúng không nằm trong đường dẫn.

Tốt hơn là tìm ra vấn đề cốt lõi và khắc phục nó trong tập lệnh.

NotTheDr01ds avatar
lá cờ vn
@steeldriver Tôi đã nghĩ vậy, nhưng sau đó tôi nhận ra rằng PATH bị đọc sai vẫn có thể xuất hiện trong `~/.bashrc` và sau đó, vì nó đã được xuất, nên sẽ được chọn bởi tập lệnh được đề cập (có khả năng chạy dưới `sh` shebang). Điều đó nói rằng, càng nghĩ về nó, tôi càng tin rằng vấn đề trích dẫn có thể nằm trong kịch bản được đề cập.
NotTheDr01ds avatar
lá cờ vn
@steeldriver Vâng, tôi có đề cập đến việc Windows *nối* đường dẫn Windows trong câu hỏi, nhưng cũng có một số *chuẩn bị* đang diễn ra vì một số lý do -- `/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222. 0_x64__79rhkp1fndgsc` đang được thêm vào trước và điều đó không bình thường trong WSL. Bạn nói đúng rằng WSL không nên thực hiện phần này.
NotTheDr01ds avatar
lá cờ vn
@steeldriver Tôi thấy sự nhầm lẫn - Tuyên bố của tôi hơi mơ hồ. Khi tôi nói "chuẩn bị đường dẫn Windows cho ứng dụng Ubuntu UWP thực tế", ý tôi là đường dẫn ứng dụng đó (không phải "đường dẫn Windows"). Đã chỉnh sửa để cố gắng loại bỏ một số điểm mơ hồ.
NotTheDr01ds avatar
lá cờ vn
@steeldriver Rất tiếc - Tôi đã nghĩ rằng đường dẫn đầu tiên đã được thêm vào trước, nhưng bây giờ tôi thấy rằng toàn bộ lỗi là một phần của đường dẫn * được nối thêm * (bao gồm cả đường dẫn UWP). Tôi sẽ chỉnh sửa câu trả lời của mình để xóa phần đó. Cảm ơn!
lá cờ hr
Vâng, nó đang được mã hóa thành `export PATH=everything-up-to-first-whitespace everything-up-to-next-whitespace` tương đương với `export PATH=everything-up-to-first-whitespace` theo sau là `export mọi thứ-đến-tiếp theo-khoảng trắng`. Một giải pháp khác đơn giản là đảm bảo `$PATH` được trích dẫn trên RHS của nhiệm vụ.
NotTheDr01ds avatar
lá cờ vn
@steeldriver *"Một giải pháp khác đơn giản là đảm bảo $PATH được trích dẫn trên RHS của nhiệm vụ."* Tôi tin đó chính xác là giải pháp. Chỉ cần tìm ra dòng vi phạm và sửa nó, điều này sẽ tùy thuộc vào OP để làm.
lá cờ hr
Nhân tiện, quan sát của bạn về `sh` so với `bash` là chính xác - xem [Khi nào cần trích dẫn kép?](https://unix.stackexchange.com/a/68748/65304), đặc biệt là phần về RHS của một nhiệm vụ trong **Nơi bạn có thể bỏ qua dấu ngoặc kép** *Lưu ý rằng bạn thực sự cần dấu ngoặc kép sau `export`, bởi vì đó là nội trang thông thường, không phải từ khóa. Điều này chỉ đúng trong một số shell như dash, zsh (trong giả lập sh), yash hoặc posh; bash và ksh đều xử lý xuất khẩu đặc biệt.*
Điểm:0
lá cờ aq

Tôi có thể đến trò chơi hơi muộn ở đây, nhưng đăng bài này trong trường hợp bất kỳ ai khác tình cờ gặp chủ đề này. Tôi gặp vấn đề tương tự với bản cài đặt WSL mới bằng Ubuntu và nó đã được khắc phục bằng cách chạy các lệnh này (với quyền root) trong WSL:

$ cập nhật apt sudo && nâng cấp sudo apt -y

Tất cả những gì tôi phải làm là khởi động lại thiết bị đầu cuối WSL của mình sau đó và sự cố đã biến mất. Hy vọng điều này sẽ giúp một ai đó!

Điểm:-1
lá cờ in

Tôi tìm thấy câu trả lời trong https://arstechnica.com/civis/viewtopic.php?f=16&t=1472885 Bạn cần xóa các đường dẫn cửa sổ khỏi $PATH và bạn thực hiện việc đó bằng cách tạo /etc/wsl.conf với văn bản sau: [tương tác] appendWindowsPath=Sai Sau đó, đóng cửa sổ WSL, đợi 8 giây và khởi động lại.

NotTheDr01ds avatar
lá cờ vn
Vâng, tôi đã đề cập rằng đó là một phần của vấn đề trong đoạn đầu tiên của câu trả lời của tôi ngày hôm qua và đưa ra tùy chọn `wsl.conf` như một giải pháp thay thế, vì vậy bạn nên chấp nhận câu trả lời đó. Cũng xin lưu ý rằng việc xóa đường dẫn Windows khỏi WSL sẽ làm giảm chức năng và tính hữu dụng của nó, do đó, bạn nên sửa lỗi trích dẫn trong tập lệnh để thay thế.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.