Cygwin .bashrc ไม่ได้เป็นแหล่งที่มาเพราะ cygwin เริ่มต้นใน Windows บ้าน


9

หมายเหตุ: โปรดดูการแก้ไขครั้งที่สองของฉันด้านล่างสำหรับการอัปเดตเกี่ยวกับปัญหา

Cygwin ทำงานได้ดีสำหรับฉันจนถึงสัปดาห์ที่แล้ว ตอนนี้. bashrc ไม่ได้รับที่มา ฉันต้องติดตั้งบางอย่างหรือเปลี่ยนแปลงบางอย่าง แต่ฉันจำไม่ได้ว่าอะไรเป็นสาเหตุของปัญหา เมื่อฉันเริ่ม Cygwin ฉันอยู่ในบ้าน Windows และไม่มีนามแฝงของฉันทำงาน ฉันต้องแหล่ง. bashrc ด้วยตนเอง ต่อไปนี้คือ Cygwin.bat ของฉัน:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

ความคิดใด ๆ

แก้ไข: .bash_profile ของฉันมีสิ่งต่อไปนี้

# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
  source "${HOME}/.bashrc"
fi

EDIT2: สำคัญ! เมื่อฉันเริ่ม Cygwin มันเริ่มต้นในโฟลเดอร์บ้านของ Windows ฉันพยายามวาง. bash_profile และ. bashrc ในโฟลเดอร์นี้และพวกเขามีแหล่งที่มาอย่างถูกต้อง! ซึ่งหมายความว่าปัญหาได้รับการลดลงเพื่อหาสาเหตุที่ Cygwin เริ่มต้นในโฟลเดอร์บ้านของ Windows และไม่ใช่โฟลเดอร์บ้าน Cygwin ปกติ

EDIT3: ผลลัพธ์ของการรัน grep Gulshan / etc / passwd /

$ grep Gulshan /etc/passwd
Administrator:unused:500:513:U-Gulshan-HP\Administrator,S-1-5-21-1235613160-4193452482-2032876723-500:/home/Administrator:/bin/bash
Guest:unused:501:513:U-Gulshan-HP\Guest,S-1-5-21-1235613160-4193452482-2032876723-501:/home/Guest:/bin/bash
Gulshan:unused:1000:513:U-Gulshan-HP\Gulshan,S-1-5-21-1235613160-4193452482-2032876723-1000:/home/Gulshan:/bin/bash

เมื่อเชลล์ทุบตีของคุณเริ่มต้น (และทำให้คุณอยู่ในโฮมไดเร็กตอรี่ Windows ของคุณ), echo $HOMEพิมพ์อะไร?
Keith Thompson

มันสะท้อนบ้าน Windows ของฉันไม่ใช่บ้าน Cygwin ของฉัน
gsingh2011

แต่การใช้ไวยากรณ์ Cygwin ใช่ไหม? ( /cygdrive/c/Users/fooมากกว่าC:\Users\foo)
Keith Thompson

ใช่ใช้ไวยากรณ์ Cygwin
gsingh2011

จะเกิดอะไรขึ้นเมื่อคุณพิมพ์HOME=/home/yourname bash -lที่หน้าจอพร้อมรับคำ ถ้าฉันพูดถูกมันน่าจะทำให้เชลล์ทำงานได้ดี โปรดทราบว่านี่เป็นการวินิจฉัยหรือการแก้ไขปัญหาที่ดีที่สุดไม่ใช่วิธีแก้ปัญหา เรายังจำเป็นต้องทราบสาเหตุที่คุณ$HOMEไม่ถูกต้องตั้งแต่แรก ปัญหารากคือการตั้งค่าที่ไม่ถูกต้องของ$HOME; bash ทำงานอย่างถูกต้อง
Keith Thompson

คำตอบ:


9

Cygwin คำถามที่พบบ่อยอธิบายถึงวิธี$HOMEการตั้งค่า:

เมื่อเริ่มต้น Cygwin จาก Windows HOMEจะพิจารณาดังนี้ตามลำดับความสำคัญลดลง:

  • HOME จากสภาพแวดล้อม Windows แปลเป็นรูปแบบ POSIX
  • รายการใน /etc/passwd
  • /home/USERNAME

เมื่อใช้ Cygwin จากเครือข่าย (Telnet, SSH, ... ), การตั้งค่าจากHOME/etc/passwd

หากคุณHOMEตั้งค่าเป็นเช่น/cygdrive/cนั้นอาจเป็นไปได้ว่ามีการตั้งค่าใน Windows เริ่มต้นหน้าต่างคำสั่ง DOS และพิมพ์set HOMEเพื่อตรวจสอบว่าเป็นกรณีนี้หรือไม่

การเข้าถึงไดรฟ์ที่ใช้ร่วมกันมักจะถูก จำกัด เมื่อเริ่มต้นจากเครือข่ายผู้ใช้โดเมนอาจต้องการที่จะมีHOMEสภาพแวดล้อม Windows (ในไดรฟ์ที่ใช้ร่วมกัน) แตกต่างจากใน/etc/passwd(ในไดรฟ์ภายในเครื่อง) โปรดทราบว่า SSH จะพิจารณาไม่คำนึงถึง/etc/passwd HOME

การเดาที่ดีที่สุดของฉันคือคุณทำ/etc/passwdแฟ้มของคุณยุ่ง (โฮมไดเร็กตอรี่ Windows %USERPROFILE%ไม่ใช่, %HOME%)

grep USERNAME /etc/passwdพิมพ์อะไร(แทนที่USERNAMEด้วยชื่อผู้ใช้ของคุณ)?


ฉันได้เพิ่มผลลัพธ์ลงในคำถามของฉันเพื่อให้อ่านง่ายขึ้น ดูเหมือนว่าตั้งไว้อย่างถูกต้องแล้ว อย่างไรก็ตามฉันเปิดตัวแปร Windows Environment ขึ้นเพื่อดูว่ามีตัวแปร% HOME% หรือไม่และมีและตั้งเป็น% USERPATH% ฉันลบมันแล้ว แต่ไม่ได้แก้ปัญหาของฉัน บางทีมันอาจต้องรีสตาร์ท?
gsingh2011

1
คุณลบมันออกจากแผงควบคุมระบบหรือจากเชลล์คำสั่งของ Windows โดยใช้set HOME=หรือไม่? การใช้แผงควบคุมระบบมีแนวโน้มที่จะทำงานได้ แต่อาจจำเป็นต้องรีสตาร์ท
Keith Thompson

ฉันลบมันโดยคลิกขวาที่คอมพิวเตอร์ในเมนูเริ่มคลิกที่คุณสมบัติคลิกที่การตั้งค่าระบบขั้นสูงจากนั้นตัวแปรสภาพแวดล้อมแล้วลบหน้าแรก จำเป็นต้องรีสตาร์ท ตอนนี้ Cygwin โหลดโฮมไดเร็กตอรี่ที่ถูกต้อง. ขอบคุณสำหรับความช่วยเหลือ
gsingh2011

1

หากคุณมี .profile หรือ .bash_profile --loginที่มีที่มาในการเข้าสู่ระบบเปลือกหอยและคุณได้รับเปลือกเข้าสู่ระบบตั้งแต่คุณผ่าน หากคุณแหล่งที่มา. profile แล้วทุบตีจะไม่แหล่ง. bashrc

ฉันจะลองใส่:

[ -f $HOME/.bashrc ] && source $HOME/.bashrc

ใน. profile ของคุณดูว่ามีประโยชน์หรือไม่ . bashrc ของคุณควรยังมีที่มาตามปกติในการเรียกใช้เชลล์การเรียกเชลล์อื่น ๆ

และอย่าผ่าน-iการทุบตี; คุณไม่ต้องการมัน ทุบตีชนิดของแฮ็กที่แกล้งทำเป็นว่าคุณให้-iในบรรทัดคำสั่ง


.bash_profile และ. profile ของฉันมีรหัสบรรทัดที่คล้ายกัน ดูคำถามที่อัปเดตของฉัน
gsingh2011

ขอโทษด้วย @Rich Homolka แต่ฉันอยากรู้ว่าทำไมคุณถึงบอกว่า-iไม่จำเป็น ขอบคุณ
Sopalajo de Arrierez

@SopalajodeArrierez หากคุณมีเชลล์แบบโต้ตอบ (ไม่ใช่สคริปต์ แต่แอ็คทีฟที่เทอร์มินัล) ทุบตีจะแกล้งทำเป็นว่าคุณให้-iคำสั่งนั้นในบรรทัดคำสั่ง ลองเปิดหน้าต่าง bash shell จากนั้นecho $-คุณควรเห็นi(ท่ามกลางธงอื่น ๆ )
Rich Homolka

1

ฉันพบพฤติกรรมเดียวกัน - อาจหลังจากติดตั้ง git (Windows) แล้ว

ในการตั้งค่าระบบฉันพบตัวแปรผู้ใช้ HOME = C: \ Users \ me และรีเซ็ตเป็น HOME = D: \ home

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