Adı sadece eksi olan bir dizine nasıl girersiniz?


26

Web sunucuma Lessn indirdim ve fermuarını açtım .

Adında bir klasör var -. Bununla nasıl başa çıkacağımı bildiğimi sanıyordum ama yapmıyorum.

Denedim cd -- -ama bu istenen etkiye sahip değildi. Tırnak kullanmak da onu etkilemiyor gibi görünüyor. Her tarafa eğik çizgi koydum, boşuna.

Bu klasöre değiştirmenin doğru yolu nedir?

Yanıtlar:


34

Parametre olmaktan kaçınmak istiyorsan, ona bir şey hazırlamaya çalışıyoruz. Geçerli dizine erişilebilir ., böylece alt klasöre -alternatif olarak erişilebilir ./-.

cd ./-

Nedeni cd -- -işi değil bu karşılaştırın farklı ise uygulanır çünkü rm(bkz man rmkadar) cd(bkz man bashya man cd), cdgördüğü yorumu farklı -bir parametre (bkz olarak man bashya man cd).

Bu cevabıncd okunabileceği gibi bir kabuk yerleşimi işlevi olduğu da belirtilmelidir :

cdharici bir komut değil - bir kabuk yerleşik işlevidir. Geçerli kabuk bağlamında çalışır ve harici komutların yaptığı gibi bir çatal / exec'd bağlamında ayrı bir işlem olarak gerçekleştirilmez.

Dış bir cdkomut var, ama tamamen farklı bir şey yapıyor .

Bu, Bash ve Coreutils iki farklı şey olduğundan uygulamanın neden farklı olduğunu açıklar .

Sadece buna inanmayacağınızı varsayalım, bunu nasıl doğrularız? Kullanım whichve 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

Bkz man whichDaha fazla bilgi için, ve man bashya man typeyöneliktype


4
Hayır, "-" tüm standart uygulamalarda uygulanır, ancak seçenekleri sonlandırmak içindir. "-" tek başına bir seçenek olarak değil, önceki dizin olarak tanınır.
Stéphane Chazelas

4
Doğru çözüm, ancak açıklama yanlıştır. cdBir yerleşik olan tamamen alakasızdır . cd -- -İşe yaramaz nedeni -bir seçenek değil, bir operand olmasıdır.
Gilles 'SO- kötülük olmayı'

1
Mac OS X'te cd -- -sizi -geçerli dizinde adlandırılmış bir dizine değiştirir . FWIW.
Tim Kennedy

Yorumumun ikinci bölümüne çoğu yorum yansıyordu.
Tamara Wijsman

22

Eksi (aka dash) tek başına bir seçenek değil, bir işlenendir (yani bir seçenek olmayan bir argüman). Bu nedenle --etkisiz hale getirmeden önce koymak . Çizgi, bir işlemsel cd -ve yine de bir işlemseldir cd -- -. Diğer standart araçlar gibi cd, bir operandı, --ondan önce olup olmadığına bakmaksızın bir operand olarak kabul eder .

cdKomut işlenen için özel bir anlam yükler -. Başka bir şey, değiştirilecek bir dizindir. cd -- -adenilen dizine geçer -a, çünkü -abir işlenen ve gibi özel değildir --önler cdbir seçenek olarak ele gelen. Bu -seçenek olmayan tek başına işe yaramaz .

Etrafa tırnak koymak -yardımcı olmaz, çünkü sonunda işleneni geçecek -.

Bu nedenle tek başvurunuz aynı fikri ifade etmenin başka bir yolunu bulmak, yani aynı dizin için başka bir isim bulmak. Neyse ki, kolay bir tane var: ./göreli bir dosya adından önce eklerseniz , aynı dosya anlamına gelir. ./: Bizim durumumuzda alakasız bir fark yaratıyor CDPATHdizin adı ile başladığında istişare edilmez /, ./ya ../. Böylece:

cd ./-

Diğer bir yol, çünkü -bir dizin, bir /sonrasını eklemektir . /Bir dosya adının sonuna bir a eklemek , dosyanın bir dizin olarak ele alınmasını sağlar (özellikle, dosya bir dizine sembolik bir link ise, komut dizinin kendisinde çalışacaktır) fark yok. Böylece:

cd -- -/

Yazma -/, tamamlanma kodu ile bu arada önerilmektedir, ancak bash'te sadece aslında --ondan önce çalıştığı için cd -/bash'ın özel bir durumu yoktur (zsh yapar).


Aklımı başımdan alıyor, gerçekten denedim cd -- -/, fakat bundan cd -hemen önce eşdeğerini çalıştırdığı için , dizin aslında yoktu ve onu başka bir başarısız girişim olarak yorumladım.
Der Hochstapler


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.