Yanıtlar:
@ 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
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.
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.
$OLDPWDayarlanmamışsa, bu sizi bırakacaktır~.cd -bir hata yazdıracak (ve muhtemelen sizi bulunduğunuz yere bırakacaksınız).