Bagaimana cara cd ke direktori dengan nama ini "-2" (dimulai dengan tanda hubung)?

169

Saya memiliki direktori bernama:

-2

Saya ingin cd ke dalamnya tetapi cd mengeluh:

bash: cd: -2: invalid option

Tanpa hasil, saya sudah mencoba:

cd "-2"
cd '-2'
cd \-2

Ada solusi?

Edit: tidak ada browser file seperti mc, dll. Tersedia di server.

pengguna151851
sumber
2
Pertanyaan terkait tentang superuser: superuser.com/questions/361573/…
yms

Jawaban:

272

Setidaknya dua cara:

  1. Gunakan --argumennya.

    cd -- -2
    

    Ini menggunakan konvensi umum untuk alat GNU yaitu untuk tidak memperlakukan apa pun yang muncul setelah --sebagai opsi baris perintah.

    Seperti yang dicatat oleh komentator , konvensi ini juga didefinisikan dalam standar POSIX :

    Perilaku Default: Ketika bagian ini terdaftar sebagai "Tidak Ada.", Itu berarti bahwa implementasi tidak perlu mendukung opsi apa pun. Utilitas standar yang tidak menerima opsi, tetapi yang menerima operan, harus diakui "--"sebagai argumen pertama yang akan dibuang.

    Persyaratan untuk mengenali "--"adalah karena menyesuaikan aplikasi memerlukan cara untuk melindungi operan mereka dari opsi sewenang-wenang yang mungkin disediakan oleh implementasi sebagai ekstensi. Misalnya, jika utilitas standar foo terdaftar tidak mengambil opsi, dan aplikasi diperlukan untuk memberinya pathname dengan tanda hubung utama, ia dapat dengan aman melakukannya sebagai:

    foo -- -myfile
    

    dan menghindari masalah dengan -m yang digunakan sebagai ekstensi.

    dan juga :

    Pedoman 10:
    Argumen --harus diterima sebagai pembatas yang menunjukkan akhir dari opsi. Argumen berikut harus diperlakukan sebagai operan, bahkan jika mereka mulai dengan '-'karakter. The --Argumen tidak boleh digunakan sebagai pilihan atau sebagai operan.

  2. Tentukan jalur secara eksplisit:

    cd ./-2
    

    Ini menentukan jalur yang secara eksplisit menamai direktori saat ini ( .) sebagai titik awal.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Ini adalah variasi di atas. Sejumlah variasi seperti itu dimungkinkan; Saya akan meninggalkannya sebagai latihan bagi pembaca untuk menemukan semuanya.

Michael Hampton
sumber
23
Bukan hanya GNU, itu bagian dari standar POSIX. Lihat 1.11 Default Uraian Utilitas dan 12.2 Panduan Sintaks Utilitas (pedoman # 10). Dari cdhalaman " cdUtilitas harus sesuai dengan ... bagian 12.2".
Dietrich Epp
Sekarang saya hanya ingin tahu tentang cara cd ke direktori bernama -!
sergiol
2
@sergiol Dengan cara yang sama.
Michael Hampton
1
@ ArtB: Tidak. Mengutip hanya memengaruhi pemisahan bidang. Jadi "hello world"adalah satu argumen tetapi hello worlddua, dan "-2"sama dengan -2.
Dietrich Epp
1
@sergiol: Baik cd -- --atau cd ./--seharusnya bekerja.
Keith Thompson
49

Ini seharusnya bekerja:

cd -- -2 

- berarti tidak ada lagi opsi

Tim Haegele
sumber
26

Ini akan berfungsi jika '-2' ada di direktori saat ini.

    cd ./-2

Anda dapat melengkapi otomatis dengan mengetik - dan menekan tab.

pemula
sumber
11

cd /home/...../-2 juga berfungsi. Berikan jalur lengkap untuk mengakses.

Vivek
sumber
7

Sebagai pelengkap, jika Anda ingin menghapus / menghapus direktori ini, Anda dapat menggunakan perintah berikut:

rm -r -- -2
Zignd
sumber
... dan hanya untuk melengkapi, saya tidak akan pernah melakukan itu, saya akan menggunakan alat grafis seperti mc atau saya akan mengganti nama direktori terlebih dahulu.
Nick
-1

Saya tahu pertanyaan ini sudah dijawab. Jika ada yang punya situasi seperti saya, ini untuk mereka:

Saya menjalankan aplikasi java dan sedang mencari direktori yang dimulai dengan <path>, saya seharusnya menggantinya dengan jalur yang benar sebelum menjalankan aplikasi. Namun, saya lupa melakukannya. Aplikasi membuat direktori bernama <path>.

Saya mencoba cd <path>- memberi saya kesalahan "-bash: kesalahan sintaks dekat baris token tak terduga" Berdasarkan saran di sini (saya mengerti bahwa ini untuk direktori dimulai dengan - dan bukan <) saya mencoba cd -- <path>. Namun, saya mendapat kesalahan yang sama.

Ketika saya mencoba cd \<path>\- ini berhasil!

Informasi latar belakang:

Simbol "<" dan ">" digunakan untuk mengarahkan ulang STDIN dan STDOUT, oleh karena itu mereka harus melarikan diri untuk membuat shell tidak menafsirkannya sebagai pengalihan.

Jobin Thomas
sumber