Çıktı olmadan “cd -” kullanın


28

cd -Herhangi bir çıktıyı yankılamadan komutu nasıl çalıştırırım ?
Denedim cd - 2>&1 /dev/nullama bu hedef dizini basıyor.
Bunun nedeni bir bash işlevi kullanmak istemem ve gereksiz çıktıya sahip olmamayı tercih etmemdir.

Yanıtlar:


32

Bu şekilde dene:

cd - > /dev/null

Ayrıca şunları da yapabilirsiniz:

cd - > uselessfile

Bu çıktıyı STDOUT yerine "yararsız dosya" dosyasına gönderir.

Dosyayı oluşturmak veya üzerine yazmak yerine de ekleyebilirsiniz.

cd - >> uselessfile

15

@ erewok soruyu zaten cevapladı , ancak gerçekte neler olduğunu ve yaptığınız davranışı neden gördüğünüzü açıklamak için bir göz atacağım.

Sorun senin yönlendirmenle ilgili. Yazıyorsun:

cd - 2>&1 /dev/null

yönlendirmeler komut satırında herhangi bir yerde görünebileceği için (bunu kendiniz gibi basit bir şeyle kendiniz doğrulayabilirsiniz echo a b 2>&1 c </etc/fstab d), yönlendirmeler gerçekten kesildikten sonra:

cd - /dev/null

Sorunu gördün mü? Bir argümana cddeğil, iki yönlendirmeye iki argüman iletiyorsunuz. Aynı anda yalnızca bir geçerli dizinde bulunabildiğiniz için cd, bu durumda ilk argümanını dikkate alır -.

Muhtemelen yazmayı düşündüğünüz şey cdhem stderr hem de stdout komutunun / dev / null komutuna yönlendirilmesidir. Bunu yapmanın iki yolu var.

Durumunuzdaki en kolay yönlendirme yapmak istediğiniz kabuğu bir >karakter ekleyerek basitçe bilgilendirmek olacaktır . Bu, @ erewok'un önerdiği şey.

cd - 2>&1 >/dev/null

Bu ilk önce stderr'i (dosya tanımlayıcısı 2) dosya tanımlayıcı 1'e (stdout) yönlendirir, ardından stdout'u (örtük 1) / dev / null'a yönlendirir. Siparişin önemli olduğunu unutmayın; Yönlendirmeleri tersine çevirirseniz aynı sonucu elde edemezsiniz, ancak bazı durumlarda belirli programın ilgili çıkış akışlarını nasıl kullandığı nedeniyle yaptığınız anlaşılabilir.

Alternatif olarak, @demure tarafından önerildiği gibi , &>bu sözdizimi kabuğunuz tarafından destekleniyorsa her iki akışı da bir kerede yönlendirmek için kullanabilirsiniz .

cd - &>/dev/null

$OLDPWDStandart hata çıktısını sistem kara deliğine yönlendirdiğiniz için bu alternatiflerin herhangi birinin artık yokken hatayı susturacağını unutmayın . Bu bir endişe ise, $?daha sonra kontrol ederim ; bu gerçek bir kaygı ise, kendiniz doğrulamalısınız, ancak en azından sınavlarımda, başarılı olduktan sonra başarısız bir set cd(olsun cd $someplaceveya olmasın cd -) .$? = 1$? = 0


5

Belki kullanabilirsiniz

cd $OLDPWD

ama bu durumda daha fazla yazmaya ihtiyacınız olacak :)

Ancak bir avantaja sahip olacaksınız: Herhangi bir hata olursa mesaj / dev / null'a yönlendirilmez.


1
Eğer $OLDPWDayarlanmamışsa, bu sizi bırakacaktır ~. cd -bir hata yazdıracak (ve muhtemelen sizi bulunduğunuz yere bırakacaksınız).
10:13 CVn

1
Haklı değilsin. $ OLDPWD ayarlanmamışsa (neden? Belki de kullanıcı bunu ayarlayabilir), 'cd -', "cd $ OLDPWD" ile aynı sonucu verir. Manuel sayfayı kontrol edin ('cd -' eşittir 'cd "$ OLDPWD" && pwd'). Veya test edebilirsiniz :) 'OLDPWD = ""; cd - '- Gördüğünüz gibi ~ içine girip bir ~ karakter basacaksınız.
uzsolt

1
Daha yeni test ettim. Sistemimde, sekans ikinci cdde cd /tmp bash cd -diyor bash: cd: OLDPWD not set; sıra cd /tmp bash cd $OLDPWDsizi ~ içine bırakır (neredeyse kesinlikle çünkü $ OLDPWD boş bir dizgeye genişler). Söz konusu kabuğun içinde cd $OLDPWDen az bir tane yaptıktan sonra iyi çalışacaktır cd, ancak ondan önce değil.
bir CVn

Evet, haklısın. Zsh ile test ettim ve zsh hata mesajı bırakmıyor.
uzsolt

1

Stdout ve stderr komutunu yönlendirin: cd - &>/dev/null

&>kısa el uyarlamasıdır cd - 2>/dev/null 1>&2ben kullanmak demek ne düşündüğünü, ...

  • Not &>bash> = 4.0 gerektirir.

Ps. komutların çoğu konumlara gösterilebilir, bu yüzden aslında yapmanız gerekmemektedircd


0

Kullanabilirsiniz:

cd ~-

Altındaki bash adam sayfasına göre Tilde Expansion:

Tilde öneki bir ~ - - ise, eğer ayarlanmışsa OLDPWD kabuk değişkeninin değeri değiştirilir.

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.