Anda ingin menghindarinya dari menjadi parameter, jadi kami mencoba untuk menambahkan sesuatu padanya. Direktori saat ini dapat diakses dengan .
, sehingga subfolder -
dapat diakses secara alternatif dengan ./-
.
cd ./-
Alasan yang cd -- -
tidak berhasil adalah karena ini diterapkan secara berbeda jika Anda membandingkan rm
(lihat man rm
) dengan cd
(lihat man bash
atau man cd
), cd
memiliki interpretasi berbeda yang dilihat -
sebagai parameter (lihat man bash
atau man cd
).
Juga harus dicatat bahwa cd
ini adalah fungsi shell builtin, seperti yang dapat dibaca dalam jawaban ini :
cd
bukan perintah eksternal - ini adalah fungsi shell builtin. Ini berjalan dalam konteks shell saat ini, dan tidak, seperti yang dilakukan perintah eksternal, dalam konteks fork / exec'd sebagai proses yang terpisah.
Ada cd
perintah eksternal , tetapi melakukan sesuatu yang sama sekali berbeda .
Ini menjelaskan mengapa implementasinya berbeda, karena Bash dan Coreutils adalah dua hal yang berbeda.
Anggap saja Anda tidak akan percaya ini, bagaimana kami mengonfirmasi itu? Gunakan which
dan type
.
$ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
$ which rm && type rm
/bin/rm
/bin/rm is /bin/rm
Lihat man which
untuk informasi lebih lanjut, dan man bash
atau man type
untuktype
cd
merupakan builtin. Alasannyacd -- -
tidak bekerja adalah itu-
adalah operan, bukan opsi.cd -- -
akan mengubah Anda ke direktori bernama-
di direktori saat ini. FWIW.Suatu minus (alias tanda hubung) saja bukanlah suatu pilihan, tetapi suatu operan (yaitu argumen yang bukan suatu opsi). Karena itu, menempatkan
--
sebelum itu tidak berpengaruh. Tanda hubung adalah operan dicd -
dan masih operan dicd -- -
. Seperti utilitas standar lainnya,cd
memperlakukan operan sebagai operan terlepas dari apakah ada--
sebelumnya.The
cd
perintah memberikan arti khusus untuk operan-
. Yang lainnya adalah direktori untuk beralih.cd -- -a
beralih ke direktori yang dipanggil-a
, karena-a
tidak khusus sebagai operan dan--
mencegahcd
memperlakukannya sebagai opsi. Ini tidak bekerja-
sendiri yang bukan pilihan.Meletakkan tanda kutip di sekitar
-
tidak akan membantu, karena pada akhirnya itu akan melewati operan-
.Karenanya, satu-satunya jalan Anda adalah menemukan cara lain untuk mengekspresikan ide yang sama, yaitu nama lain untuk direktori yang sama. Untungnya, ada yang mudah: jika Anda menambahkan
./
sebelum nama file relatif, itu masih berarti file yang sama. Itu./
membuat perbedaan yang tidak relevan dalam kasus kami:CDPATH
tidak dikonsultasikan ketika nama direktori dimulai dengan/
,./
atau../
. Demikian:Cara lain, karena
-
adalah direktori, adalah dengan menambahkan/
setelahnya. Menambahkan a/
di akhir nama file memastikan bahwa file diperlakukan sebagai direktori (khususnya, perintah akan beroperasi pada direktori itu sendiri dan bukan pada symlink jika file tersebut adalah tautan simbolik ke direktori), tetapi sebaliknya membuat tidak ada perbedaan. Demikian:Menulis
-/
disarankan oleh kode penyelesaian, omong-omong, tetapi dalam bash hanya benar-benar berfungsi dengan--
sebelumnya, bash tidak memiliki kasus khusus untukcd -/
(zsh tidak).sumber
cd -- -/
, tetapi karena telah menjalankan yang setaracd -
sebelum itu, direktori sebenarnya tidak ada dan saya menafsirkannya sebagai upaya gagal lainnya.Memenuhi syarat dengan jalur adalah satu opsi.
sumber
Ini juga akan bekerja:
atau
sumber