Saya cenderung untuk awalan file dan folder yang sering digunakan dengan karakter "aksen kuburan" (tilde non-shift, tanda centang-kembali, atau aksen lama-biasa, yang Anda inginkan ..), karena mudah didapat, dan biarkan saya mengurutkan hal-hal berdasarkan abjad, sementara membiarkan saya memilih untuk menunjukkan beberapa item di atas. Ini berfungsi dengan baik, kecuali ketika saya mengakses file-file ini melalui CLI atau SSH / SCP.
Jika saya mencoba menjalankan perintah, memanggil file itu tidak terhapus ↝ itu menendang saya ke sesi interaktif .. misalnya ↯
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>
Namun jika saya mencoba solusi logis ↯
# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
↩
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Saya tahu aturan "baru" adalah menggunakan sintaksis seperti export NOW=$(date)
vs export NOW=
`date` (pada kenyataannya, saya punya waktu bahkan menulis yang terakhir dalam sintaks SE MD ...) tetapi ini tidak terkait dengan ENV
atau skrip apa pun. ..
Catatan: Ini adalah lingkungan Mac OS X, tetapi yang mengatakan, GUI tidak pernah memiliki masalah berurusan dengan karakter ini setiap hari, dan biasanya, jika akan ada masalah sintaksis di Terminal, Apple melakukan pekerjaan yang cukup baik untuk menonaktifkan perilaku di GUI ... Tidak yakin apakah ini bug, atau jika teknik untuk berurusan dengan jalur seperti itu tidak jelas .. tetapi sejauh ini, saya belum dapat menemukan cara "untuk menghindarinya" ?
Jawaban:
Anda dapat menggunakan 3 garis miring terbalik seperti yang disebutkan oleh Jed Daniels atau Anda dapat membungkusnya dengan tanda kutip tunggal
(')
dan menggunakan garis miring terbalik tunggal.Contoh keduanya ada di bawah ini.
sumber
Tiga backslash harus melakukannya:
Backslash pertama lolos dari backtick sehingga dikirim ke sisi lain, tetapi sisi lain melempar kesalahan karena mengharapkan backtick berpasangan. Backslash kedua lolos dari backslash pertama, maka Anda memerlukan dua backslash tambahan sehingga Anda dapat mengirim backslash yang lolos ke sisi lain.
EDIT: Seperti yang disebutkan Rik, Anda juga dapat melakukannya dengan satu kutipan. Saya tidak memikirkan hal ini karena Anda tidak dapat menggunakannya dengan variabel (mereka tidak akan diperluas pada sistem lokal ketika dalam tanda kutip tunggal).
sumber
Biasanya, perintah baris ditafsirkan oleh shell sekali. Namun, karena alasan historis, scp meneruskan nama file ke shell jauh juga, sehingga nama file akan ditafsirkan oleh shell dua kali . Ini juga yang membuat hal-hal seperti
scp remote:'/path/prefix*' /path/local/
bekerja, shell jarak jauh berkembang/path/prefix*
.Cara termudah untuk menghindari ekspansi kedua adalah menggunakan sftp, yang tidak menggunakan shell jarak jauh. Itu masih melakukan ekspansi glob, tetapi karena Anda dapat memberikan perintah pada stdin, Anda dapat menghindari ekspansi shell lokal Anda sepenuhnya.
Selain itu, Anda dapat menggunakan salah satu mekanisme kutipan shell normal, termasuk yang diberikan oleh @ Dani Daniels dan @Rik Schneider, tetapi saya ingin menjelaskan apa yang sebenarnya terjadi dan menyebutkan sftp.
(Anda dapat menggunakan semua jenis fitur shell di nama file scp Anda, misalnya
scp server:\$HOME/file dest
akan menggunakan ide shell remote$HOME
, sedangkan jika Anda mengeluarkannya\
, ia akan menggunakan shell lokal Anda .).sumber