Saya menggunakan Cygwin di laptop saya (DOS). Saya memiliki koleksi skrip dari kolega saya, dan saya sendiri. Saya bukan orang IT, tidak berpengetahuan luas di Unix. Saya mengikuti sintaks kolega saya dan mampu mengelola beberapa hal sederhana.
Skrip bekerja dengan baik di laptop lama saya. Saya baru saja mengganti laptop, menginstal Cygwin. Ketika saya menjalankan skrip saya, mereka tidak berfungsi. Berikut adalah salah satu contoh pesan kesalahan yang saya dapatkan:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Inilah 5 baris teratas dari skrip saya
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
Bisakah seseorang tolong jelaskan bagaimana saya bisa mengatasi masalah ini?
sumber
vim
dapat melakukan ini dalam dua cara, salah satunya menggunakan kata-kata. Atau, lebih baik lagi, untuk menunjuk ke mana tugas bawahan ini sudah dijawab di atas dan di sini di jauh lebih rinci daripada setiap jawaban pada halaman ini, termasuk unix.stackexchange.com/questions/88811 hanya untuk pemula.vi -b
,\r
ekstensi vim pula. tidak POSIX, tidak dalam nvi, elvis, Solaris vi ...Ini karena skrip telah disimpan oleh editor yang menggunakan akhir baris DOS (seperti Notepad ++, misalnya). Anda harus menghapus ini dari skrip Anda.
Untuk melakukan ini, gunakan
dos2unix
pada file skrip, atau(ini akan menghapus semua pengembalian carriage dari mana saja dalam skrip)
Adapun kode dalam skrip:
Ini mungkin terlihat seperti
Ini menghapus file
1.txt
dari direktori saat ini, jika ada. The:
perintah tidak apa-apa (hampir) dan dapat dihapus. Nilaiiter
variabel harus digunakan sebagai$iter
, dan dikutip. Dan kemudian saya mungkin lebih eksplisit daripada kebutuhan dengan menggunakan./
untuk mengatakan bahwa file perlu ditemukan di direktori saat ini.Jika Anda berencana untuk mengubah ini menjadi sebuah loop (di sini, menghapus semua file
1.txt
,2.txt
, ...,10.txt
):Atau, jika kita merasa licik / malas,
di shell yang mengerti ekspansi brace.
sumber
Windows (CR LF)
dan mengubahnya keUnix (LF)
rm -f [1-9].txt 10.txt
. Tapi itu tidak benar-benar logis setara, seakan tidak ada file 1-9 tetapi ada adalah file harfiah disebut[1-9].txt
maka akan dihapus. : DSkrip Anda memiliki akhiran baris yang salah. Windows menggunakan CR + LF (\ r \ n), Unix menggunakan LF (\ n), dan Classic MacOS menggunakan CR (\ r). Anda harus mengubah akhir baris pada semua file yang terpengaruh, baik dengan editor teks atau alat mandiri seperti
dos2unix
.Sistem kontrol versi dan FTP seperti SVN cenderung dapat mengkonversi akhir baris dengan tepat, jadi Anda mungkin ingin melihat opsi-opsi untuk mentransfer file di masa depan.
Jika file-file ini tidak ditransfer, tetapi hanya digunakan pada satu mesin, maka Anda akan ingin menemukan pengaturan untuk akhir baris di editor teks pilihan Anda. Sebagian besar yang diiklankan sebagai "untuk pemrogram" akan memiliki opsi seperti itu.
sumber
Sebagai jawaban tambahan izinkan saya menambahkan beberapa catatan / tips ...
Pertama, untuk file teks biasa Anda dapat dengan mudah menentukan apakah mereka memiliki baris Unix atau DOS yang berakhir menggunakan
file
perintah. Sebagai contoh:Perhatikan penggunaan saya atas
dos2unix
. Saya sangat menyarankan Anda menginstalnya. Bergantung pada bagaimana Anda menggunakan Cygwin, Anda mungkin perlu melakukan konversi ini cukup sering sehingga kenyamanan diterima. Lebih penting lagi, tidak ada kemungkinan kesalahan seperti yang Anda dapatkan dengan pengeditan manual yang dibahas di sini.Untuk menginstal, jalankan Cygwin utama yang dapat dieksekusi. Itu yang dengan nama seperti setup-x86_64.exe atau sesuatu seperti itu. Pastikan Anda melihat layar seperti ini:
Karena Anda sudah melakukan instalasi utama, Anda harus dapat mengeklik Berikutnya sampai Anda mendapatkan layar pilihan. Pilih Penuh di dropdown dan masukkan "dos2" di kotak pencarian dan pilih alat seperti yang ditunjukkan di sini:
Kemudian klik Next lagi dan biarkan instalasi selesai. Itu dia. Selamat bersenang-senang. Cygwin, dengan pengecualian ketidaknyamanan sesekali ini, adalah paket yang luar biasa.
sumber
Jika tidak dos2unix, ada juga 'flip'
$ flip -u yourfilename.txt
akan membaliknya menggunakan ujung garis unix.
sumber
Saya menggunakan Notepad ++ untuk mengedit skrip bash (.sh) saya dengan menghubungkan ke server dengan WinSCP
(Untuk mengatur editor WinSCP ke Notepad ++: https://winscp.net/eng/docs/ui_editor_preferences )
Ini sangat praktis untuk membuka file dari server untuk diedit / disimpan daripada editor " Vim ".
Ketika Anda membuka file di Notepad ++ , klik dua kali pada kolom 7 di bilah status di bagian bawah dan pilih " Unix (LF) ".
Anda juga harus mengubah yang ke-8 dengan Encoding -> Encode di UTF-8 di bar bagian atas.
sumber
Anda tidak perlu mengubah pengkodean baris file yang sebenarnya agar Bash Cygwin bekerja dengan senang hati dengan pengkodean end-of-line Mac dan Windows. Ada opsi yang Anda butuhkan untuk menyalakannya.
Cukup perbarui
~/.bash_profile
sehingga berisiLihat https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html
sumber