Pertanyaan BASH Script ke cd ke direktori dengan spasi di pathname


Argggg. Saya telah berjuang dengan masalah bodoh ini selama berhari-hari dan saya tidak dapat menemukan jawabannya.

Saya menggunakan BASH di Mac OS X dan saya ingin membuat file skrip executable sederhana yang akan berubah ke direktori lain ketika dijalankan. Namun, jalur ke direktori itu memiliki ruang di dalamnya. Bagaimana kamu melakukan ini? Ini yang saya punya ...

Nama file: cdcode

Isi file: cd ~/My Code

Sekarang diberikan, ini bukan nama path yang panjang, tetapi pathname aktual saya adalah lima direktori dan empat direktori tersebut memiliki spasi di jalur.

BTW, saya sudah mencoba cd "~/My Code" dan cd "~/My\ Code" dan tak satu pun dari ini berhasil.


76
2018-02-26 04:50


asal


Jawaban:


Saat Anda menggandakan jalur, Anda menghentikan ekspansi tilde. Jadi ada beberapa cara untuk melakukan ini:

cd ~/"My Code"
cd ~/'My Code'

Tilde tidak dikutip di sini, sehingga ekspansi tilde akan tetap dijalankan.

cd "$HOME/My Code"

Anda dapat memperluas variabel lingkungan di dalam string yang dikutip ganda; ini pada dasarnya apa yang dilakukan ekspansi tilde

cd ~/My\ Code

Anda juga dapat melepaskan karakter khusus (seperti ruang) dengan backslash.


68
2018-02-26 05:23



Hei! Saya melihat ini http://www.askdavetaylor.com/can_my_path_include_directory_names_with_spaces.html

x = "test \ me"
eval cd $ x

Kombinasi dari \ dalam konstanta teks kutipan ganda dan "eval" sebelum "cd" membuatnya bekerja seperti pesona!


28
2018-06-13 15:52



Anda dapat menggunakan salah satu dari:

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

Anda tidak dapat menggunakan:

cd ~"/My Code"

Yang pertama bekerja karena shell mengembang ~ / ke $ HOME /, dan kemudian menginjak Kode Saya tanpa tanda kutip ganda. Yang kedua gagal karena tidak ada pengguna yang disebut '"'(Kutipan ganda) untuk ~" untuk memetakan.


7
2018-02-26 05:22



cd ~/My\ Code

tampaknya bekerja untuk saya ... Jika menjatuhkan tanda kutip tetapi menjaga garis miring tidak berfungsi, dapatkah Anda memposting beberapa kode contoh?


6
2018-02-26 04:55



Satu backslash bekerja untuk saya:

ry4an@ry4an-mini:~$ mkdir "My Code"

ry4an@ry4an-mini:~$ vi todir.sh

ry4an@ry4an-mini:~$ . todir.sh 

ry4an@ry4an-mini:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

Apakah Anda yakin masalahnya bukanlah skrip shell Anda mengubah direktori dalam subkulitnya, tetapi kemudian Anda kembali di shell utama (dan direktori asli) saat selesai? Saya menghindari itu dengan menggunakan. untuk menjalankan skrip di shell saat ini, meskipun kebanyakan orang hanya akan menggunakan alias untuk ini. Ruang bisa menjadi ikan merah.


4
2018-02-26 04:57



Ketika bekerja di Linux, sintaks di bawah ini benar:

cd ~/My\ Code

Namun ketika Anda mengeksekusi file Anda, gunakan sintaks di bawah ini:

$ . cdcode

(hanya '.' dan bukan './')


2
2018-02-26 05:02



Hindari ~ dalam skrip; gunakan $ HOME sebagai gantinya.


2
2018-06-10 06:06



Cara yang sangat sederhana untuk melakukan ini adalah-

 $ cd My\ Folder

Di bash, jalankan perintah DIR dan di hasil Anda akan melihat bahwa folder atau nama path yang memiliki ruang di antara mereka telah ditulis dalam hasil seperti ini -

$dir
My\ Folder
New\ Folder

2
2018-04-28 10:04



Setelah berjuang dengan masalah yang sama, saya mencoba dua solusi berbeda yang berhasil:

  • Solusi1: Cara termudah hanya melipatgandakan tanda kutip variabel Anda seperti yang ditunjukkan dalam jawaban sebelumnya cd "$yourPathWithBlankSpace"
  • Solusi2: Menurut jawaban ini Perintah Unix untuk menghindari ruang Anda dapat menghapus ruang kosong kemudian menggunakan Eval, seperti ini:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace") + eval cd $yourPathEscaped


2
2017-12-03 10:43



Saya memiliki masalah yang sama sekarang adalah saya menggunakan skrip bash untuk membuang beberapa data. Saya akhirnya membuat tautan simbolis di folder skrip tanpa spasi di dalamnya. Saya kemudian mengarahkan naskah saya ke tautan simbolis dan itu berfungsi dengan baik.

Untuk membuat tautan Anda. ln -s [DIRECTORY TARGET ATAU FILE] ./[SHORTCUT]

Mau atau mungkin tidak berguna.


1
2018-05-13 09:20



gunakan tanda kutip ganda

go () 
{ 
    cd "$*"
}

1
2018-05-15 15:31