env: bash \ r: Không có tệp hoặc thư mục nào như vậy


94

Tôi đang cố gắng cài đặt YouCompleteMe từ đây .

Khi tôi thực hiện:

./install.sh --clang-completer

Tôi gặp lỗi này:

env: bash\r: No such file or directory

Tôi không biết có gì sai với các biến môi trường. Đây là đường dẫn bash của tôi:

which bash 
/bin/bash

Tôi có cần thay đổi nó thành /usr/bashkhông? Nếu có, thì tôi phải làm như thế nào? Tôi đã thử thay đổi ~/.bashrctệp, nhưng nó không hoạt động.

Câu trả lời:


158

Thông báo lỗi cho thấy rằng tập lệnh mà bạn đang gọi có các \rký tự được nhúng , do đó gợi ý rằng tập lệnh có kết thúc dòng kiểu Windows\r\n thay vì \nkết thúc dòng chỉ bashmong đợi.

Để khắc phục nhanh chóng , bạn có thể xóa các \rký tự. như sau:

sed $'s/\r$//' ./install.sh > ./install.Unix.sh

Lưu ý: Các $'...'chuỗi là một ANSI-C chuỗi trích dẫn hỗ trợ trong bash, kshzsh. Nó được sử dụng để đảm bảo rằng các ký tự \rmở rộng thành một ký tự CR thực tế trước khi sednhìn thấy tập lệnh, bởi vì sedbản thân không phải tất cả các triển khai đều hỗ trợ \rnhư một chuỗi thoát.

và sau đó chạy

./install.Unix.sh --clang-completer

Tuy nhiên, câu hỏi lớn hơn là tại sao bạn lại kết thúc với \r\ncác tệp kiểu - rất có thể, các tệp khác cũng bị ảnh hưởng.

Có lẽ bạn đang chạy Git trên Windows , trong đó cấu hình điển hình là chuyển đổi \nngắt dòng kiểu Unix thành ngắt \r\ndòng kiểu Windows khi kiểm tra tệp và chuyển đổi lại thành \nngắt dòng chỉ khi cam kết .

Mặc dù điều này có ý nghĩa đối với sự phát triển trên Windows, nhưng nó lại cản trở các tình huống cài đặt như thế này.

Để làm cho Git kiểm tra các tệp có đuôi tệp kiểu Unix trên Windows - ít nhất là tạm thời - hãy sử dụng:

git config --global core.autocrlf false

Sau đó chạy lại các lệnh cài đặt của bạn git clone.

Để khôi phục hành vi của Git sau này, hãy chạy git config --global core.autocrlf true.



17

Tệp của bạn có phần cuối dòng Windows. Thay đổi thành cuối dòng Unix.


13

Ran thành một cái gì đó tương tự. Bạn có thể sử dụng dos2unix install.shđể chuyển đổi các kết thúc dòng. Nhiều tệp quafind [pattern] | xargs dos2unix


1
Bạn có thể sử dụng:find . -type f -exec dos2unix {} \;
s.ouchene

13

Lệnh nhanh để chuyển đổi kết thúc dòng:

dos2unix thescript.sh

4

Trong trường hợp của tôi, tôi có cấu hình git sai. Tài liệu git cho biết:

Nếu bạn đang lập trình trên Windows và làm việc với những người không phải (hoặc ngược lại), có thể bạn sẽ gặp phải sự cố kết thúc dòng tại một số điểm

Tôi đang sử dụng Mac OS và chính xác là tôi gặp sự cố này trong một trong những dự án của mình. Để giải quyết nó, tôi đã chuyển autocrlfsang truecái sai.

Bạn có thể kiểm tra autocrlftrạng thái cấu hình git của mình như sau:

git config core.autocrlf

Vì vậy, nếu điều này trả về truevà sự cố xảy ra trong kho lưu trữ git, bạn sẽ phải thay đổi cấu hình đó thành

git config --global core.autocrlf input

trên hệ thống Mac / Unix. Đối với các dự án chỉ dành cho Windows, bạn có thể sử dụng

git config --global core.autocrlf false

Trong trường hợp của tôi, tôi đã xóa kho lưu trữ git và sao chép nó một lần nữa và sau đó mọi thứ hoạt động trở lại như mong đợi.

Tìm hiểu thêm tại https://www.git-scm.com/book/vi/v2/Customizing-Git-Git-Configuration


bạn đã cứu ngày của tôi. Tôi đã vật lộn với vấn đề kết thúc dòng này trong 2 ngày.
Tahmidur Rahman

4

Như các ý kiến ​​ở trên nói, nó đang xảy ra do kết thúc dòng cửa sổ. Để khắc phục sự cố, hãy làm theo các bước sau

Đối với MAC:

brew install dos2unix # Installs dos2unix Mac
find . -type f -exec dos2unix {} \; # recursively removes windows related stuff

Đối với Linux:

sudo apt-get install -y dos2unix # Installs dos2unix Linux
sudo find . -type f -exec dos2unix {} \; # recursively removes windows related stuff

Và đảm bảo rằng cấu hình git của bạn được đặt như sau:

git config --global core.autocrlf input

Cuối cùng là làm việc. Tôi đã phải đối mặt với vấn đề này trong 2 ngày và đó là do kết thúc dòng cửa sổ từ dự án mà tôi đã sao chép từ github và về mặt tài chính, giải pháp của bạn là giải pháp hoàn hảo. cảm ơn.
Riddhi

1
Tôi rất vui vì nó đã giúp bạn :)
salvi shahzad

cuối cùng đã hoạt động hoàn hảo. cảm ơn bạn rất nhiều
Muhammad Ashfaq

2

Trong trường hợp của tôi, tôi có cấu hình git sai. Tài liệu git cho biết:

Nếu bạn đang lập trình trên Windows và làm việc với những người không phải (hoặc ngược lại), có thể bạn sẽ gặp phải sự cố kết thúc dòng tại một số điểm

Tôi đang sử dụng Mac OS và chính xác là tôi gặp sự cố này trong một trong những dự án của mình. Để giải quyết nó tôi điều chỉnh autocrlfđể true.

Bạn có thể kiểm tra autocrlftrạng thái cấu hình git của mình như sau:

git config core.autocrlf

Vì vậy, nếu điều này trả về truevà sự cố xảy ra trong kho lưu trữ git, bạn sẽ phải thay đổi cấu hình đó thành

git config --global core.autocrlf input

cái nào là đúng cho hệ thống Mac / Unix. Đối với các dự án chỉ dành cho Windows, bạn có thể sử dụng

git config --global core.autocrlf false

Trong trường hợp của tôi, tôi đã xóa kho lưu trữ git và kiểm tra lại và sau đó mọi thứ hoạt động trở lại như mong đợi.

Tìm hiểu thêm tại https://www.git-scm.com/book/vi/v2/Customizing-Git-Git-Configuration


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.