Saya menggunakan Bash di macOS X dan saya ingin membuat file skrip yang dapat dieksekusi sederhana yang akan berubah ke direktori lain saat dijalankan. Namun, jalur ke direktori tersebut memiliki spasi di dalamnya. Bagaimana sih kamu melakukan ini? Inilah yang saya miliki ...
Nama file: cdcode
Isi file:
cd ~/My Code
Sekarang diberikan, ini bukan nama jalur yang panjang, tetapi nama jalur saya yang sebenarnya adalah lima direktori sedalam dan empat dari direktori tersebut memiliki spasi di jalurnya.
BTW, saya sudah mencoba cd "~/My Code"
dan cd "~/My\ Code"
dan tak satu pun dari ini bekerja.
Jawaban:
Saat Anda mengutip dua kali 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 tetap dijalankan.
cd "$HOME/My Code"
Anda dapat memperluas variabel lingkungan di dalam string yang dikutip ganda; ini pada dasarnya adalah apa yang dilakukan ekspansi tilde
cd ~/My\ Code
Anda juga dapat keluar dari karakter khusus (seperti spasi) dengan garis miring terbalik.
sumber
Saya menemukan solusi di bawah ini di halaman ini :
x="test\ me" eval cd $x
Kombinasi
\
konstanta teks kutip ganda daneval
sebelumcd
membuatnya bekerja seperti pesona!sumber
eval
sini.eval
.Setelah berjuang dengan masalah yang sama, saya mencoba dua solusi berbeda yang berhasil:
1. Gunakan tanda kutip ganda (
""
) dengan variabel Anda.Cara termudah, cukup gandakan variabel Anda seperti yang ditunjukkan pada jawaban sebelumnya:
cd "$yourPathWithBlankSpace"
2. Memanfaatkan
eval
.Menurut jawaban ini perintah Unix untuk keluar dari spasi, Anda dapat menghapus spasi kosong lalu gunakan
eval
, seperti ini:yourPathEscaped=$(printf %q "$yourPathWithBlankSpace") eval cd $yourPathEscaped
sumber
cd ~/My\ Code
tampaknya berhasil untuk saya ... Jika menghapus tanda kutip tetapi tetap memangkas tidak berhasil, dapatkah Anda memposting beberapa kode contoh?
sumber
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 berfungsi karena shell mengembang ~ / menjadi $ HOME /, lalu memasang Kode Saya tanpa tanda kutip ganda. Gagal kedua karena tidak ada pengguna yang disebut '
"
' (tanda kutip ganda) untuk~"
dipetakan.sumber
Satu garis miring terbalik 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 bukan karena skrip shell Anda mengubah direktori di subkulitnya, tetapi kemudian Anda kembali ke shell utama (dan direktori asli) setelah selesai? Saya menghindari itu dengan menggunakan. untuk menjalankan skrip di shell saat ini, meskipun kebanyakan orang hanya akan menggunakan alias untuk ini. Ruang-ruang itu bisa menjadi ikan haring merah.
sumber
Hindari ~ dalam skrip; gunakan $ HOME sebagai gantinya.
sumber
Saat bekerja di Linux, sintaks di bawah ini benar:
cd ~/My\ Code
Namun saat Anda menjalankan file Anda, gunakan sintaks di bawah ini:
$ . cdcode
(hanya '.' dan bukan './')
sumber
gunakan tanda kutip ganda
go () { cd "$*" }
sumber
.bashrc
file untuk mengubah direktori saat menempelkan nama direktori yang berisi spasi ke baris perintah tanpa harus keluar dari spasi atau mengutip semuanya.cds
adalah nama yang lebih baik.go
akan setara dengancd
, misalnya, cd ke direktori home?Cara yang paling sederhana untuk melakukan ini adalah-
$ cd My\ Folder
Di bash, jalankan perintah DIR dan dalam hasil Anda akan melihat bahwa nama folder atau jalur yang memiliki spasi di antara mereka telah ditulis dalam hasil seperti ini -
$dir My\ Folder New\ Folder
sumber
Ini akan melakukannya:
cd ~/My\ Code
Saya harus menggunakannya untuk bekerja dengan file yang disimpan di iCloud Drive. Anda tidak ingin menggunakan tanda kutip ganda (") karena ini harus berupa jalur absolut. Dengan kata lain, Anda tidak dapat menggabungkan tanda kutip ganda dengan tilde (~).
Sebagai contoh, saya harus menggunakan ini untuk proyek terbaru:
cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project
Saya harap itu membantu.
sumber
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 skrip saya ke tautan simbolis dan itu berfungsi dengan baik.
Untuk membuat tautan Anda. ln -s [TARGET DIRECTORY OR FILE] ./[SHORTCUT]
Mau atau mungkin tidak berguna.
sumber
Gunakan tanda kutip tunggal, seperti:
myPath=~/'my dir' cd $myPath
sumber