env: bash \ r: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว


94

ฉันพยายามที่จะติดตั้ง YouCompleteMe จากที่นี่

เมื่อฉันดำเนินการ:

./install.sh --clang-completer

ฉันได้รับข้อผิดพลาดนี้:

env: bash\r: No such file or directory

ฉันไม่รู้ว่ามีอะไรผิดปกติกับตัวแปรสภาพแวดล้อม นี่คือเส้นทางทุบตีของฉัน:

which bash 
/bin/bash

ฉันจำเป็นต้องเปลี่ยนเป็น/usr/bashหรือไม่? ถ้าใช่ฉันควรทำอย่างไร? ฉันพยายามเปลี่ยน~/.bashrcไฟล์ แต่ไม่ได้ผล

คำตอบ:


158

ข้อความแสดงข้อผิดพลาดแสดงให้เห็นว่าสคริปต์ที่คุณกำลังเรียกใช้มี\rอักขระที่ฝังอยู่ซึ่งจะแสดงให้เห็นว่ามีการ\r\nลงท้ายบรรทัดแบบ Windowsแทนที่จะเป็น\n- เฉพาะการสิ้นสุดบรรทัดที่bashคาดไว้

ในการแก้ไขด่วนคุณสามารถลบ\rตัวอักษรได้ ดังต่อไปนี้:

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

หมายเหตุ: $'...'สตริงเป็นANSI-C อ้างสตริงการสนับสนุนในbash, และksh zshใช้เพื่อให้แน่ใจว่า\rขยายเป็นอักขระ CR จริงก่อนที่จะsedเห็นสคริปต์เนื่องจากsedการนำไปใช้งานทั้งหมดไม่สนับสนุน\rเป็นลำดับการหลีกเลี่ยง

แล้วเรียกใช้

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

อย่างไรก็ตามคำถามที่ใหญ่กว่าคือทำไมคุณจึงลงเอยด้วย\r\nไฟล์สไตล์ซึ่งเป็นไปได้มากว่าไฟล์อื่น ๆ จะได้รับผลกระทบด้วย

บางทีคุณอาจกำลังใช้Git บน Windowsซึ่งการตั้งค่าทั่วไปคือการแปลง Unix สไตล์\nแบ่งบรรทัดเท่านั้นเป็น Windows แบบ\r\nแบ่งบรรทัดในการตรวจสอบไฟล์ออกและอีกแปลงไป\nแบ่งบรรทัดเท่านั้นในการกระทำ

แม้ว่าสิ่งนี้จะสมเหตุสมผลสำหรับการพัฒนาบน Windows แต่ก็เข้าสู่สถานการณ์การติดตั้งเช่นนี้

ในการทำให้ Git ตรวจสอบไฟล์ที่มีนามสกุลไฟล์แบบ Unix บน Windows - อย่างน้อยก็ชั่วคราว - ให้ใช้:

git config --global core.autocrlf false

จากนั้นเรียกใช้คำสั่งการติดตั้งของคุณที่เกี่ยวข้องgit cloneอีกครั้ง

เพื่อเรียกคืนพฤติกรรม Git git config --global core.autocrlf trueภายหลังเรียก



17

ไฟล์ของคุณมีส่วนท้ายบรรทัดของ Windows เปลี่ยนเป็นการสิ้นสุดบรรทัด Unix


13

วิ่งเข้าไปในสิ่งที่คล้ายกัน คุณสามารถใช้dos2unix install.shเพื่อแปลงส่วนท้ายบรรทัด หลายไฟล์ผ่านfind [pattern] | xargs dos2unix


1
คุณสามารถใช้:find . -type f -exec dos2unix {} \;
s.ouchene


4

ในกรณีของฉันฉันมีการกำหนดค่าคอมไพล์ผิด เอกสาร git ระบุ:

หากคุณกำลังเขียนโปรแกรมบน Windows และทำงานร่วมกับผู้ที่ไม่ได้เป็น (หรือในทางกลับกัน) คุณอาจประสบปัญหาเกี่ยวกับบรรทัดสุดท้าย

ฉันใช้ Mac OS และฉันมีปัญหานี้ในหนึ่งในโครงการของฉัน เพื่อแก้ปัญหาฉันหันautocrlfไปหาtrueสิ่งที่ผิด

คุณสามารถตรวจสอบautocrlfสถานะการกำหนดค่าคอมไพล์ของคุณได้ดังนี้:

git config core.autocrlf

ดังนั้นหากสิ่งนี้ส่งคืนtrueและปัญหาเกิดขึ้นภายในที่เก็บ git คุณจะต้องเปลี่ยนการกำหนดค่านั้นเป็น

git config --global core.autocrlf input

บนระบบ Mac / Unix สำหรับโครงการ Windows เท่านั้นที่คุณสามารถใช้ได้

git config --global core.autocrlf false

ในกรณีของฉันฉันลบที่เก็บ git และโคลนอีกครั้งและหลังจากนั้นทุกอย่างก็ทำงานอีกครั้งตามที่คาดไว้

ดูข้อมูลเพิ่มเติมได้ที่https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration


คุณบันทึกวันของฉัน ฉันกำลังดิ้นรนกับปัญหาการสิ้นสุดบรรทัดนี้เป็นเวลา 2 วัน
Tahmidur Rahman

3

อย่างที่ความเห็นข้างบนบอกมันเกิดขึ้นเนื่องจากการสิ้นสุดบรรทัดของ windows ในการแก้ไขปัญหาให้ทำตามขั้นตอนเหล่านี้

สำหรับ MAC:

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

สำหรับ Linux:

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

และตรวจสอบให้แน่ใจว่าได้ตั้งค่าคอมไพล์ของคุณแล้วดังนี้:

git config --global core.autocrlf input

ทำงานในที่สุด ฉันประสบปัญหานี้เป็นเวลา 2 วันและเป็นปัญหาของการสิ้นสุดบรรทัดของ windows จากโครงการที่ฉันโคลนจาก github และสุดท้ายโซลูชันของคุณเป็นโซลูชันที่สมบูรณ์แบบ ขอบคุณ.
Riddhi

1
ฉันดีใจที่ได้ช่วยเหลือคุณ :)
salvi shahzad

ในที่สุดก็ทำงานได้อย่างสมบูรณ์ ขอบคุณมาก
Muhammad Ashfaq

2

ในกรณีของฉันฉันมีการกำหนดค่าคอมไพล์ผิด เอกสาร git ระบุ:

หากคุณกำลังเขียนโปรแกรมบน Windows และทำงานร่วมกับผู้ที่ไม่ได้เป็น (หรือในทางกลับกัน) คุณอาจประสบปัญหาเกี่ยวกับบรรทัดสุดท้าย

ฉันใช้ Mac OS และฉันมีปัญหานี้ในหนึ่งในโครงการของฉัน การแก้ปัญหามันผมปรับไปautocrlftrue

คุณสามารถตรวจสอบautocrlfสถานะการกำหนดค่าคอมไพล์ของคุณได้ดังนี้:

git config core.autocrlf

ดังนั้นหากสิ่งนี้ส่งคืนtrueและปัญหาเกิดขึ้นภายในที่เก็บ git คุณจะต้องเปลี่ยนการกำหนดค่านั้นเป็น

git config --global core.autocrlf input

ซึ่งเป็นระบบที่ถูกต้องสำหรับระบบ Mac / Unix สำหรับโครงการ Windows เท่านั้นที่คุณสามารถใช้ได้

git config --global core.autocrlf false

ในกรณีของฉันฉันลบที่เก็บ git และตรวจสอบอีกครั้งและหลังจากนั้นทุกอย่างก็ทำงานอีกครั้งตามที่คาดไว้

ดูข้อมูลเพิ่มเติมได้ที่https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration


-1

ลิงก์นี้ช่วยฉันแก้ปัญหา https://github.com/tiangolo/uwsgi-nginx-flask-docker/issues/127

ฉันแก้ไขไฟล์. sh ของฉันแทนที่ CRLF ทั้งหมดด้วย LF


นั่นเป็นสิ่งที่แย่มากที่ต้องทำ โปรดดูโซลูชันที่ดีกว่ามากมายที่ให้ไว้ข้างต้น
salvi shahzad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.