Pertanyaan Bagaimana cara cd ke direktori dengan spasi di nama?


Saya mencoba banyak hal. Lihat di bawah:

Coba masuk ke direktori: / cygdrive / c / Pengguna / dir / Dokumen saya

$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my\ dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my\: No such file or directory

$ cd /cygdrive/c/Users/my\ dir/Documents
(success)

Perilaku yang sangat aneh. Ketika saya mengetiknya secara manual, backspace melakukan hal karakter melarikan diri. Tapi tidak ketika saya menggunakan ekspansi parameter dengan DOCS variabel.
Saya mencoba variasi lain seperti tidak ada backslash.

$ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory

atau

$ DOCS="/cygdrive/c/Users/my dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory

Saya tahu itu mungkin. Lihat disini:

$ echo $HOME
/home/my dir

[EDIT] Seperti yang ditunjukkan, cd $ HOME juga tidak berfungsi. kutipan harus diletakkan di sekitarnya.

Apa apaan:

$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""

$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"

$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory

32
2017-08-19 21:33


asal


Jawaban:


$ cd "$DOCS"

Anda perlu mengutip "$DOCS" untuk mencegah spasi dari diurai sebagai pemisah kata. Lebih sering daripada tidak, referensi variabel harus dikutip.

Perhatikan itu $HOME akan memiliki masalah yang sama. Masalahnya berasal dari ketika shell mengevaluasi referensi variabel; itu tidak ada hubungannya dengan variabel apa yang Anda gunakan atau bagaimana Anda menetapkannya. Ini adalah ekspansi yang perlu dikutip.

$ echo $HOME
/home/my dir

Ini menipu. echo sebenarnya menggemakan dua string /home/my dan dir. Jika Anda menggunakan cd atau ls Anda akan melihat bagaimana cara kerjanya.

$ ls $HOME
ls: cannot access /home/my: No such file or directory
ls: cannot access dir: No such file or directory
$ cd $HOME
bash: cd: /home/my: No such file or directory
$ cd "$HOME"
<success!>

Dapatkah saya bertanya mengapa itu berfungsi ketika saya mengetiknya secara manual tetapi tidak dalam variabel?

Pertanyaan bagus! Mari kita periksa perintah yang Anda ketikkan:

$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory

Alasan ini tidak berhasil adalah karena Bash tidak menguraikan kutipan di dalam perluasan variabel. Saya t tidak melakukan pemisahan kata, jadi spasi dalam perluasan variabel yang tidak dikiuar diambil sebagai pemisah kata. Saya t tidak Kutip kutipan dengan cara apa pun, yang berarti Anda tidak dapat menempatkan tanda kutip ganda di dalam variabel untuk mengesampingkan pembagian kata.

$ cd $DOCS

Karena ini, cd dilewatkan dua parameter. Sejauh cd tahu sepertinya Anda menulis:

$ cd '"/cygdrive/c/Users/my' 'dir/Documents"'

Dua parameter, dengan tanda kutip ganda utuh.


35
2017-08-19 21:38



$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

Inilah masalah pertama Anda. Ini menempatkan karakter backslash yang sebenarnya $DOCS, seperti yang Anda lihat dengan menjalankan perintah ini:

$ echo "$DOCS"
/cygdrive/c/Users/my\ `

Ketika mendefinisikan DOCS, Anda harus keluar dari karakter luar angkasa. Anda dapat mengutip string (menggunakan tanda kutip tunggal atau ganda) atau Anda dapat melarikan diri hanya karakter ruang dengan backslash. Anda tidak bisa melakukan keduanya. (Pada kebanyakan sistem mirip Unix, Anda dapat memiliki backslash dalam nama file atau direktori, meskipun itu bukan ide yang baik. Pada Cygwin atau Windows, \ adalah pemisah direktori. Tapi saya akan menganggap nama sebenarnya dari direktori tersebut my dirtidak my\ dir.)

$ cd $DOCS

Ini melewati dua argumen ke cd. Yang pertama adalah cygdrive/c/Users/my\, dan yang kedua adalah dir/Documents. Itu terjadi itu cd diam-diam mengabaikan semua kecuali argumen pertamanya, yang menjelaskan pesan kesalahan:

-bash: cd: /cygdrive/c/Users/my\: No such file or directory

Untuk mengatur $DOCS untuk nama Anda Documents direktori, lakukan salah satu dari ini:

$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ DOCS='/cygdrive/c/Users/my dir/Documents'
$ DOCS=/cygdrive/c/Users/my\ dir/Documents

Setelah Anda selesai melakukannya, untuk mengubah ke Anda Documents direktori, melampirkan referensi variabel dalam tanda kutip ganda (itu ide yang bagus untuk apa saja referensi variabel dalam bash, kecuali Anda yakin nilainya tidak memiliki karakter lucu):

$ cd "$DOCS"

Anda mungkin juga mempertimbangkan memberikan direktori itu nama tanpa spasi di dalamnya - meskipun itu bisa sulit dilakukan secara umum di Windows.


5
2017-08-19 22:11



LARUTAN:

cd "Documents and Photos"

masalah terpecahkan.

Alasan saya mengirimkan jawaban ini adalah Anda akan menemukan bahwa StackOverflow digunakan oleh pengguna setiap hari (bukan hanya pengembang web, pemrogram, atau pengguna daya) dan ini adalah hasil nomor satu untuk pertanyaan pengguna Windows sederhana di Google.

Orang-orang menjadi lebih tech-savvy, tetapi belum tentu akrab dengan baris perintah dalam kasus-kasus di atas.


4
2017-07-16 14:01



Mengapa tidak menaruh yang berikut ini di Anda .cshrc (atau .bashrc, atau apa pun shell default Anda):

alias mydoc 'cd "/cygdrive/c/Users/my dir/Documents"'

Pertama kali Anda melakukan ini, Anda harus melakukannya

source .cshrc

untuk memperbarui shell dengan alias baru ini, maka Anda dapat mengetik

mydoc

kapan saja kamu mau cd ke direktori Anda.

Kemalasan adalah ibu dari penemuan ...


1
2017-08-19 21:54



Jika Anda ingin pindah c:\ dan kamu ingin pergi ke c:\Documents and settings, tulis di konsol: c:\Documents\[space]+tab dan cygwin akan melengkapi otomatis sebagai c:\Documents\ and\ settings/


1
2017-09-30 15:34



mencoba

DOCS="/cygdrive/c/Users/my\ dir/Documents";

cd "$DOCS"

0
2017-08-19 21:39



ok saya menghabiskan beberapa waktu frustasi dengan masalah ini juga. Panduan kecilku.

Buka desktop misalnya. Jika Anda tidak mengganti cakram Anda dalam cmd, ketik:

cd desktop

Sekarang jika Anda ingin menampilkan subfolder:

CD, buat 1 bilah spasi, dan tekan tab 2 kali

Sekarang jika Anda ingin memasukkan direktori / file dengan SPACE DI NAME. Ayo buka beberapa nama file misalnya, untuk membukanya kita perlu mengetik:

nama file cd \ 

p.s. perhatikan ruang ini setelah slash :)


0
2018-06-25 14:36



Sederhananya folder dalam satu kutipan

sebagai contoh

C:\> cd my folder

akan

 C:\> cd 'my folder' 

0
2018-02-22 14:34