Cygwin - cd ในสคริปต์ทุบตี


12

ฉันยังใหม่กับการใช้ Cygwin ดังนั้นขอโทษถ้านี่เป็นคำถามที่มือใหม่

ฉันมีสคริปต์ทุบตีที่ฉัน "cd" ไปยังไดเรกทอรีแล้วทำอะไรในไดเรกทอรีนั้น อย่างไรก็ตามคำสั่ง cd ล้มเหลวด้วย "ไม่มีไฟล์หรือไดเรกทอรี / c / code / blah / blah"

ถ้าฉันคัดลอกบรรทัด cd ลงในเชลล์พรอมต์โดยตรงมันก็ใช้ได้ดี มันล้มเหลวในสคริปต์

[แก้ไข] ตามที่ร้องขอฉันได้เพิ่มบรรทัดจริงจากสคริปต์:

#!/bin/bash
cd /c/Code/Project

ขอบคุณสำหรับความช่วยเหลือใด ๆ กับ
Dan นี้


1
คุณสามารถโพสต์บรรทัดที่แท้จริงจากสคริปต์ได้หรือไม่
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

คำตอบ:


18

สคริปต์ของคุณมีการสิ้นสุดบรรทัดประเภทใด เพื่อให้สคริปต์ทุบตี Cygwin ทำงานอย่างถูกต้อง (โดยไม่ต้องตั้งค่าตัวเลือกพิเศษ) จะต้องมี Unix Line endings (LF) มากกว่า DOS line endings (CR-LF) หากคุณบันทึกสคริปต์ด้วยการสิ้นสุดบรรทัด DOS ทุบตีจะเห็นการโต้แย้งของคุณในcdฐานะ/c/Code/Project^Mที่^Mเป็น CR และจะไม่พบไดเรกทอรีตามชื่อนั้น

เมื่อต้องการดูว่ามีการสิ้นสุดของบรรทัดประเภทใดคุณสามารถดำเนินการfile scriptnameโดยที่scriptnameคือชื่อของสคริปต์ของคุณ d2u scriptnameการแปลงสคริปต์เพื่อให้มีระบบปฏิบัติการยูนิกซ์ตอนจบบรรทัดรัน

อย่าใช้ Notepad เพื่อแก้ไขสคริปต์ทุบตี Cygwin มันจะบันทึกไฟล์ด้วยการสิ้นสุดบรรทัด DOS


Aha! นั่นมัน ฉันใช้ Vim เพื่อแก้ไข ขอบคุณ :-)
แดน

กลุ่มจะทำงานได้ดี ตรวจพบโดยอัตโนมัติว่าไฟล์มีจุดสิ้นสุดบรรทัด Unix หรือ DOS หรือไม่และจะบันทึกในลักษณะเดียวกัน โดยค่าเริ่มต้นกลุ่มของ Cygwin จะสร้างไฟล์ใหม่ที่มีจุดสิ้นสุดบรรทัด Unix แต่ gvim ของ Windows จะสร้างไฟล์ใหม่ด้วยการสิ้นสุดบรรทัด DOS คุณสามารถเปลี่ยนได้ ดูและ:help ff :help ffs
garyjohn

Emacs ยังประหยัดด้วย CR-LF การเปลี่ยนรูปแบบบรรทัดสิ้นสุดในโปรแกรมแก้ไข: emacswiki.org/emacs/EndOfLineTips
jfklein

3

เว้นแต่คุณจะแทนที่สคริปต์จะดำเนินการในสำเนาของเชลล์ (โดยปกติคือ Bash) จากนั้นเมื่อสคริปต์ออกตัวอย่างของการทุบตีก็จะออก ดังนั้นซีดีสคริปต์ของคุณไปยังไดเรกทอรีใหม่แล้วออกจากการคืนคุณสู่ Bash ดั้งเดิม - ซึ่งไม่เคยทำซีดี

สองวิธีในการหลีกเลี่ยง คุณสามารถใช้นามแฝงแทนสคริปต์เช่นใน. profile ของคุณมี

alias mycd="cd /c/Code/Project"

อีกวิธีหนึ่งคือการบอก Bash ไม่ให้วางไข่ subshell โดยใช้ไวยากรณ์ "dot"

. myscript

คุณได้อ่านคำถามของฉันผิด ข้อความแสดงข้อผิดพลาดที่ฉันถามเกี่ยวกับเขียนไปยัง stdout โดยคำสั่ง cd ซึ่งอยู่ในสคริปต์ ฉันไม่ได้ขอให้ไดเรกทอรีปัจจุบันมีการเปลี่ยนแปลงเมื่อออกจากสคริปต์
ด่าน

ฉันมีปัญหาคล้ายกับ OP แต่ไม่มีข้อผิดพลาด คำตอบนี้ช่วยฉันได้มากแม้ว่าจะไม่ใช่ "100% ในหัวข้อ"
Frosty Z


1

ลอง:

cd /cygdrive/c/code/blah/blah


ที่จะทำงานสำหรับ'cd c:/code/blah/blah'ไม่ได้สำหรับ'cd /c/code/blah/blah' นอกจากนี้c:รูปแบบ '' ยังทำงานได้จากสคริปต์เช่นกัน มีบางอย่างหายไปที่นี่คำถามต้องการรายละเอียดเพิ่มเติม
nik

สิ่งนี้ไม่ทำงาน
ด่าน

@nik the c: แบบฟอร์มไม่ทำงานเช่นกัน ฉันลองทำอะไรไม่ได้เลยจากสคริปต์ พวกเขาทั้งหมดทำงานจากบรรทัดคำสั่ง
ด่าน

1

ฉันไม่มีชื่อเสียงในการแสดงความคิดเห็นหรือลงคะแนน แต่คำตอบของ CarlF ช่วยฉันได้

"ดังนั้นซีดีสคริปต์ของคุณไปยังไดเรกทอรีใหม่แล้วออกจากการคืนคุณสู่ Bash ดั้งเดิม - ซึ่งไม่เคยทำซีดี"

สคริปต์เดียวกัน แต่ในกรณีของฉันไม่มีข้อความแสดงข้อผิดพลาด

สิ่งนี้ใช้ได้กับฉัน:

. myscript.sh

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