`-` sadece cd ile mi kullanılır?


45

cd - Geçerli dir ve önceki dir arasında geçiş yapabilir.

Daha -önce diğer komutların argümanları olarak kullanıldığını görmüştüm , ancak bununla -aynı anlama geldiğini hatırlamıyorum cd.

-İşe yaramadığını öğrendim ls.

Is - sadece cd ile kullanılabilir?


8
Akılda tutulması gereken bir şey cd, bir yerleşik komuttur, harici bir komut değildir (tek olarak çalışacak şekilde de olmaz). cd -bu nedenle kabuk seviyesi bir özelliktir.
— kabarık

6
Bir git checkout -önceki şubeye geçmek için her zaman kullanıyorum
— wim

@fluffy: -Diğer yerleşiklerle aynı şekilde mi kullanılıyor?
— Tim,

pushdEvet gibi bazı dizin işlemcileri için . Aksi takdirde, "önceki dizin" in anlamı çok kullanışlı bir varsayılan değil.
— kabarık

1
Belki de bash'ın '~ -' özelliğini ($ OLDPWD olarak yorumlanır) düşünüyorsunuz. 'Ls' ile tarif ettiğiniz şekilde kullanılabilir.
— abonet,

Yanıtlar:


22

POSIX yarar sözdizimi kuralları (özellikle # 13) bir dosya adı, okuma bekliyoruz kamu hizmetleri için belirtmek -, standart girdi aracı ve e yazma için bir dosya adı bekliyoruz programlar için -araçlar standart çıkışa. Örneğin cat somefile -, içeriğini somefilestandart çıktısına kopyalar , ardından standart girişte okuduğunu gösterir.

Bu kılavuz cddosyaya okumadığı veya yazmadığı için komuta uygulanmaz . cdfarklı bir şey yapar: argüman -“önceki dizin” anlamına gelir. Komut cd -eşittir cd "$OLDPWD" && pwd. Bu davranış, cdkomuta ve bu gibi doğrudan ilham veren komutlara özgüdür pushd.

Bu -bir seçenek değil bir işlenendir. İle başlayan Sadece argümanlar -ve sadece olmayan -veya --seçeneklerdir. Bir operand olmanın asıl anlamı, --onun özel anlamını etkilememesidir. Örneğin, cd -- -Pbir alt dizine değişiklikler denir -P, ancak cd -- -bunun adı aynı cd -dizinde değişmez -. Benzer şekilde, cat -- -denilen bir dosyadan okunmaz -fakat standart girdiden okunur .


46

-POSIX Yardımcı Programı Sözdizimi Kılavuzunda standart girdi olarak tanımlanmıştır :

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

Bu tanımı, okuma ve yazma dosyalarıyla çalışan yardımcı programlar için görebilirsiniz. cdbu yardımcı programlara ait değildir, bu nedenle -cd bu kılavuza uymaz.

Ayrıca POSIX'in ayrıca cd- ile kendi anlamı vardır :

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.

36

cd -gerçekte kısaca cd "$OLDPWD" && pwd, nerede bulunduğunuz $OLDPWDdizine her dizin değiştirdiğinizde ayarlanır.

Kullanım şekli -uygulamaya bağlıdır. Bazı uygulamalar kullanmak -belirtmek için STDIN, örneğin grep,awk

Diğer uygulamalar kullanabilir -ile, Michael'ın cevabı belirttiği olarak seçtikleri herhangi bir şey için bir kısaltma olarak su, -steno içindir--login


evet gerçekten bunun için bir kural yok.
— Kiwy

2
@Kiwy: POSIX ile bunun için bir kural var, cevabımı görün.
— cuonglm

Kesin olarak, genel bir kural var, ancak bunun birçok istisnası var. Kuralı belirleyen çok sayıda komut veya kurala uyması için güncellenmemiş eski uygulamalar da vardır.
— Barmar

19

Michael bahseder rağmen sudiğer uygulamaların kullanabilir ve -ne isterlerse anlamında, (Stdin yaygındır okunan) Git kullanımını yapar -nasıl benzer bir şekilde cdyapar dalları değiştirmek için.

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master

18

Herhangi bir program -istediklerini ifade etmek için bir argüman olarak kullanabilir . Yaygın bir örnek sukullanan, -için kısaltma olarak --login. Aklıma gelen tek kural, dosyalardan okuyan programların sık sık "stdin'den okumak"- anlamına geldiği , ancak tamamen programa bağlı olduğu yönünde.


Özel sembolleri argüman olarak kullanmak için standart veya standart olmayan kurallar var mı?
— Tim

2

İki kuruşumu buraya ekliyorum. Daha önce bazılarının önerdiği gibi ps2pdf aracını standart girdiden okumasını söylemek için '-' kullanıyorum:

man -t ls | ps2pdf - ls.pdf

Yukarıdaki bir liner , geçerli dizindeki ls için man sayfasının pdf versiyonunu oluşturur .
Birisi onu yararlı bulur umarım :).


2

Tarafından cevap olarak gnouc , -kendi anlamı vardır cd.

Ancak, -kullanarak diğer programların davranışını çoğaltabilirsiniz ~-. Örneğin:

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
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.