Ternyata rsync tidak dapat bekerja dengan server jauh yang memiliki file .bashrc?
Di klien lokal saya dapatkan ketika menjalankan rsync:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(180) [sender=3.0.7]
Seperti yang disarankan di sini menghapus .bashrc di server memecahkan masalah. Bagaimana mengatasinya tanpa menghapus file .bashrc (sementara)?
Jawaban:
Anda dapat mengalami masalah jika
.bashrc
server jauh mengeluarkan sesuatu ke terminal. Rsync mungkin tidak mengharapkan itu dan mungkin memiliki masalah sebagai hasilnya.Anda dapat memperbaikinya dengan menghapus perintah apa pun di
.bashrc
teks keluaran itu, atau dengan memipakan keluaran apa pun ke / dev / null.sumber
.Bashrc benar-benar bukan tempat yang tepat untuk menghasilkan output, karena menyebabkan masalah semacam ini. Banyak orang lolos begitu saja, sampai mereka mencoba menjalankan rsync :-)
Setiap output yang diinginkan (dan logika serta perintah yang terkait) harus dipindahkan ke .bash_profile Anda (lihat, mis., Pertanyaan Server Fault ".profile vs. .bash_profile vs. .bashrc" untuk diskusi lebih lanjut tentang perbedaan antara file-file).
Dengan begitu, Anda tidak perlu berkorban untuk mendapatkan output ketika Anda login, atau berurusan dengan membuat perubahan sementara pada .bashrc Anda saat Anda ingin menggunakan rsync.
sumber
Saya selalu memiliki file .bashrc pada akun pengguna saya dan tidak pernah memiliki masalah ini sampai saya mencoba hari ini untuk rsync sesuatu ke server saya menggunakan akun root. Pos Anda membantu saya menemukan solusinya:
file $ user / .bashrc saya selalu dimulai dengan bagian berikut untuk mencegah masalah seperti ini. Saya menyalinnya ke root .bashrc dan rsync'ing sekarang berfungsi seperti mantra!
HTH, karsten
sumber
rsync
, karena untuk alasan apa pun diklasifikasikan sebagai "shell interaktif". Tapi itu adalah baris yang baik untuk ditambahkan, karena mungkin mengacaukan shell non-interaktif jika tidak ada outputUntuk alasan kompleks rsync / scp / sftp menjalankan .bashrc saat menghubungkan ke host lain. Anda harus memiliki salah satu dari perintah ini di bagian atas .bashrc Anda :
antara
atau
Salah satu dari perintah di atas hanya akan memungkinkan pelaksanaan sisa perintah .bashrc untuk sesi interaktif . Sejauh yang saya tahu Anda tidak membutuhkannya untuk jenis sesi lain (dan memang saya telah melihat bashrc default dari Arch dan Debian menggunakan teknik ini di bashrc mereka).
Namun jika Anda ingin menjadi paranoid ekstra tentang membiarkan perintah bashrc Anda berjalan bahkan untuk sesi non-interaktif, Anda setidaknya harus membungkus perintah-perintah bashrc Anda yang menghasilkan output seperti ini ( referensi ) sehingga hanya berjalan dalam sesi interaktif:
Perhatikan bahwa orang lain menyarankan untuk memindahkan perintah yang menampilkan teks ke bash_profile Anda, tetapi saya ragu apakah ini selalu baik (untuk alasan yang dijelaskan di sini )
sumber