Cygwin - Bas Betiğinde CD


12

Cygwin'i kullanmakta yeniyim, bu çok yeni bir soru ise özür dilerim.

Ben bir dizine "cd" sonra o dizinde bir şey yapmak bir bash komut dosyası var. Ancak cd komutu "Böyle bir dosya veya dizin / c / code / blah / blah yok" ile başarısız olur.

CD satırını doğrudan kabuk istemine kopyalarsam, o zaman iyi çalışır. Sadece senaryoda başarısız oluyor.

İstendiği gibi koddan gerçek satırları ekledim:

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

Bu konuda yardım ettiğin için teşekkürler
Dan.


1
Gerçek satır (lar) ı senaryodan gönderebilir misiniz?
sonraki duyuruya kadar duraklatıldı.

Yanıtlar:


18

Senaryonuzda ne tür satır sonları var? Cygwin bash betiğinin (özel seçenekleri ayarlamak zorunda kalmadan) düzgün çalışması için DOS satır sonları (CR-LF) yerine Unix satır sonlarına (LF) sahip olması gerekir. Komut dosyasını DOS satır sonlarıyla kaydettiyseniz, bash argümanınızı cdas /c/Code/Project^M, nerede ^Mbir CR olduğu olarak görür ve bu ada göre bir dizin bulamaz.

O, sen yürütebileceği sahip satır sonları hangi tür görmek için file scriptnamenerede, komut dosyasının Senaryonuzun adıdır. Komut dosyasını Unix satır sonlarına sahip olacak şekilde dönüştürmek için yürütün d2u scriptname.

Cygwin bash komut dosyalarını düzenlemek için Not Defteri'ni kullanmayın. Her zaman DOS satır sonları ile dosyaları kaydeder.


Aha! Öyleydi. Düzenlemek için Vim kullanıyordum. Teşekkür :-)
Dan

Vim iyi çalışır. Dosyaların Unix veya DOS satır sonlarına sahip olup olmadığını otomatik olarak algılar ve bunları aynı şekilde kaydeder. Varsayılan olarak, Cygwin'in vim dosyası Unix satır sonlarıyla yeni dosyalar oluşturur, ancak Windows 'gvim DOS satır sonlarıyla yeni dosya oluşturur. Bunu değiştirebilirsiniz. Bkz :help ffve :help ffs.
garyjohn

Emacs da CR-LF ile tasarruf ediyordu. Editördeki satır sonu stilini değiştirme: emacswiki.org/emacs/EndOfLineTips
jfklein

3

Geçersiz kılmadığınız sürece, bir komut dosyası kabuğun kendi kopyasında (genellikle Bash) yürütülür. Daha sonra komut dosyası çıktığında, bu bash örneği de çıkar. Komut dosyası CD'leri yeni bir dizine yerleştirilir ve sonra çıkar ve sizi orijinal CD'ye döndürür.

Etrafında çalışmanın iki yolu. Bir komut dosyası yerine diğer ad kullanabilirsiniz, örneğin .profile

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

Başka bir yol da Bash'e "nokta" sözdizimini kullanarak bir alt kabuk üretmemesini söylemektir

. myscript

Sorumu yanlış okudun. Hakkında sorduğum hata iletisi, stdout'a komut dosyası içindeki cd komutu ile yazılır. Komut dosyası çıktığında geçerli dizinin değiştirilmesini istemiyorum.
Dan

Ben OP benzer bir sorun vardı ama hatasız; "% 100 konuyla ilgili" olmasa bile bu cevap bana çok yardımcı oldu.
Frosty Z


1

Deneyin:

cd /cygdrive/c/code/blah/blah


Bu 'cd c:/code/blah/blah'için değil 'cd /c/code/blah/blah' için işe yarayacaktır . Ayrıca, ' c:' formu bir komut dosyasından da çalışır; Burada başka bir şey eksik, sorunun daha fazla detaylandırılması gerekiyor.
nik

Bu işe yaramadı.
Dan

@nik c: form da çalışmadı. Denediğim hiçbir şey bir senaryodan çalışmıyor. Hepsi komut satırından çalışır.
Dan

1

Yorum yapmak veya oy vermek için itibarım yok ama CarlF'ın cevabı bana yardımcı oldu.

"Komut dosyası CD'lerinizi yeni bir dizine yerleştirip çıkıp sizi orijinal Bash'e döndürerek - hiçbir zaman CD yapmadı."

Aynı komut dosyası, ancak benim durumumda hata mesajı yok.

Bu benim için çalıştı:

. myscript.sh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.