2011-12-31 2 views
0

У меня есть это:Как сохранить возвращаемое значение cd?

cd $dir 

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

И то, что я хочу, что если CD возвращает ошибку (на 1-й линии) ошибка не будет отображаться оболочкой. Мне нужно только показать сообщение, которое я написал. я пытался сделать:

ret=$(cd $dir) 

Но это не работает. Как мне это сделать?

+0

Синтаксис '$ (...)' фиксирует * вывод * команды, а не ее статус. –

+0

Спасибо за разъяснение. – LiLou1

+0

На самом деле вы не хотите печатать свое сообщение. Вы действительно предпочли бы, чтобы cd выдавал сообщение об ошибке. Ошибка может быть не в том, что каталог не существует, и в этом случае ваше сообщение об ошибке неверно. Просто напишите: cd $ dir || выход -1. (Или просто установите set -e) –

ответ

4

Перенаправление стандартная ошибка:

cd $dir 2>/dev/null 
+1

Было бы полезно, по крайней мере, мне, если бы была предоставлена ​​причина для downvote. Благодарю. – hmjd

+0

Ну, конечно! Ty :) – LiLou1

+0

Решил ли это? Или что-то другое? – hmjd

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 $dir || exit 255 

Попытка вывести сообщение об ошибке, когда вы не имеете ни малейшего представления, что произошла ошибка как раз и приводит к путанице.

Смежные вопросы