Пожалуйста, объясните мне, как правильно использовать функцию оболочки Unix.
Например, у нас есть следующие функции f и g:
f()
{
#do something
return $code
}
g()
{
print $something
}
Мы можем использовать функцию f следующим образом:
f
if [[ $? -eq 0 ]]; then
#do 1
else
#do 2
fi
Эта функция выполняет некоторую работу ивыходы с некоторым статусом выхода.
И мы можем проанализировать этот статус выхода.
Мы можем использовать функцию g следующим образом:
g
или
result=$(g)
if [[ $result = "something" ]]; then
#do something
fi
В первом случае мы только что вызвали функцию.
Во втором случаемы использовали подстановку команд, чтобы назначить весь текст, который печатает функция, на стандартный вывод переменной result.
Но что, если есть следующая функция:
z()
{
user=$1
type=$2
if [[ $type = "customer" ]]; then
result=$(/somedir/someapp -u $user)
if [[ $result = "" ]]; then
#something goes wrong
#I do not want to continue
#I want to stop whole script
exit 1
else
print $result
fi
else
print "worker"
fi
}
Я могу использовать функцию z следующим образом:
z
Если что-то пойдет не так, тогда весь скрипт будетбыть остановленным.
Но что, если кто-то использует эту функцию в подстановке команд:
result=$(z)
В этом случае, если someapp вернет пустую строку, скрипт не будет остановлен.
Это неправильный подход к использованиювыход в функции?