2011-12-31 75 views
0

我有這樣的:如何保存cd的返回值?

cd $dir 

if[ $? -eq 0 ]; then ... 
else echo "The directory doesn't exist"; exit -1; 
fi 

而我想的是,如果CD返回一個錯誤(1號線),誤差不會被shell中顯示。我只想顯示我寫的信息。 我試過:

ret=$(cd $dir) 

但是這並不奏效。我該怎麼做?

+0

'$(...)'語法捕獲命令的*輸出*,而不是其狀態。 – 2011-12-31 20:59:49

+0

感謝您的澄清。 – LiLou1 2011-12-31 21:44:38

+0

其實,你不想打印你的信息。你真的更喜歡cd發出錯誤信息。錯誤可能不是該目錄不存在,在這種情況下,您的錯誤消息不正確。只需寫:cd $ dir ||退出-1。 (或者只是設置-e) – 2011-12-31 21:45:51

回答

4

重定向標準錯誤:

cd $dir 2>/dev/null 
+1

如果提供downvote的原因,對我來說至少是有幫助的。謝謝。 – hmjd 2011-12-31 20:11:10

+0

嗯,當然! Ty :) – LiLou1 2011-12-31 21:43:16

+0

這是否解決了它?或者是其他東西? – hmjd 2012-01-03 21:41:19

4
if cd $dir 2> /dev/null; then ...; else echo "The directory doesn't exist"; exit -1; fi 
1
cd $dir 2>/dev/null || { echo "The directory doesn't exist"; exit -1; } 
... 
1

如果目錄確實存在,但劇本沒有權限進入它,然後你正在嘗試做的是迷惑用戶。如果您的意圖是混淆用戶,那麼繼續使用提供的其他答案。但你真的想要做的是讓CD發出錯誤信息,只是寫:

 
cd $dir || exit 255 

嘗試,當你完全不知道發生了什麼錯誤只是導致混亂打印錯誤消息。