Saya baru menggunakan Cygwin, jadi minta maaf jika ini adalah pertanyaan yang sangat pemula.
Saya memiliki skrip bash di mana saya "cd" ke direktori kemudian melakukan sesuatu di direktori itu. Namun, perintah cd gagal dengan "Tidak ada file atau direktori / c / code / bla / bla".
Jika saya menyalin baris cd langsung ke prompt shell, maka itu berfungsi dengan baik. Itu hanya gagal dalam skrip.
Seperti yang diminta, saya telah menambahkan baris sebenarnya dari skrip:
#!/bin/bash
cd /c/Code/Project
Terima kasih atas bantuannya,
Dan.
Jawaban:
Jenis akhiran seperti apa yang dimiliki skrip Anda? Agar skrip bash Cygwin berfungsi dengan baik (tanpa harus menetapkan opsi khusus), skrip bash Cyrwin harus memiliki ujung garis Unix (LF) daripada ujung garis DOS (CR-LF). Jika Anda menyimpan skrip dengan ujung baris DOS, bash akan melihat argumen Anda
cd
sebagai/c/Code/Project^M
, di mana^M
CR, dan tidak akan menemukan direktori dengan nama itu.Untuk melihat jenis akhir baris itu, Anda bisa menjalankan
file scriptname
, di mana scriptname adalah nama script Anda. Untuk mengonversi skrip sehingga memiliki akhiran baris Unix, jalankand2u scriptname
.Jangan gunakan Notepad untuk mengedit skrip bash Cygwin. Itu selalu menyimpan file dengan ujung baris DOS.
sumber
:help ff
dan:help ffs
.Kecuali Anda menimpa, skrip mengeksekusi di salinan shell sendiri (biasanya Bash). Lalu ketika skrip keluar, instance bash itu juga keluar. Jadi skrip CD Anda ke direktori baru dan kemudian keluar, mengembalikan Anda ke Bash asli - yang tidak pernah melakukan CD.
Dua cara untuk mengatasinya. Anda dapat menggunakan alias alih-alih skrip, misalnya di .profile miliki
Cara lain adalah memberi tahu Bash untuk tidak menelurkan subkulit dengan menggunakan sintaks "dot"
sumber
Anda mungkin menemukan file Anda di / cygdrive / c ...
sumber
Mencoba:
cd /cygdrive/c/code/blah/blah
sumber
'cd c:/code/blah/blah
'bukan untuk'cd /c/code/blah/blah
'. Juga,c:
formulir ' ' juga berfungsi dari sebuah skrip; Ada hal lain yang hilang di sini, pertanyaannya perlu dijabarkan lebih lanjut.Saya tidak memiliki reputasi untuk berkomentar atau memilih tetapi jawaban CarlF membantu saya.
"Jadi, skrip CD-mu ke direktori baru lalu keluar, mengembalikanmu ke Bash asli - yang tidak pernah menghasilkan CD."
Skrip yang sama, tetapi dalam kasus saya, tidak ada pesan kesalahan.
Ini bekerja untuk saya:
. myscript.sh
sumber