`-` 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.