




У меня была аналогичная проблема, это можно сделать так:
rm -f error_marker_file export var=`svn ls || touch error_marker_file` [ -f error_marker_file ] && echo "error in executing svn ls"
var=`svn ls`
if [[ $? == 0 ]]
then
export var
else
unset var
fi
$? - это код выхода последней выполненной команды, в данном случае это svn ls.
Решение jmohr короткое и приятное. Мягко адаптировано,
var=`svn ls` && export var || unset var
будет примерно эквивалентен приведенному выше (export действительного идентификатора никогда не завершится ошибкой, если вы не сделали что-то ужасное и не исчерпали пространство среды). Берите все, что хотите - я использую unset, чтобы избежать возможной ценности $var, даже если он не экспортируется.
if var=$(svn ls); then export var; else unset var; fi был бы более чистым препаратом. Нет смысла проверять $? - с сопутствующей повышенной хрупкостью, поскольку это означает, что ведение журнала или другие команды могут нарушить этот статус - когда вы можете переходить непосредственно в самой строке.
var=`svn ls` && export var
export FOO=$(your-command) || echo "your-command failed"
Это не работает, поскольку вопрос гласит: $? устанавливается из "export", а не из "your-command", если вы напишете это так.
Оно работает. Я постараюсь найти более элегантное решение - иначе оно у вас есть.