在shell脚本中,echo可用于从函数返回值。但是,如果这些功能要打印一些消息。然后,可以通过将其重定向到错误流来完成此操作。下面是一个简化的示例:
#this is a function that returns a value, as well as
#print some messages
function logic(){
echo >&2 "start of logic"
echo >&2 "perform logic, to get value"
echo "ok"
}
function smain(){
local result=$(logic)
echo "result is >$result<"
if [ "$result" == "ok" ];then
echo "script successful"
else
echo "script failed"
fi
}
smain
以下是示例执行输出:
sh sample.sh
start of logic
perform logic, to get value
result is >ok<
script successful
很好 但是当此脚本用作autosys作业时。然后来自逻辑功能的消息最终会在错误流文件触发警报中出现。
可以通过任何方式将逻辑函数的消息写入输出流,而不将消息与返回值混合。
编辑1:-
#!/usr/bin/env bash
function Return(){
printf -v "$1" '%s' '$*'
}
function logic() {
local arg=$1
local system=$2
echo "start of logic"
echo "all params are >$*<"
echo "perform logic, to get value"
echo >&2 "logic successfully completed"
printf -v "$1" '%s' 'abraKaDabra'
}
function main() {
local result='' ; logic "$@" result
printf 'result is >%s<\n' "$result"
if [ "$result" = "ok" ]; then
echo "script successful"
else
echo "script failed"
fi
echo >&2 "end of main"
}
main "$@"
输出:-
$
sh returnValueWithDebugging.sh abc xyz > out.log 2>err.log
$
cat err.log
logic successfully completed
end of main
$
cat out.log
start of logic
all params are >abc xyz result<
perform logic, to get value
result is ><
script failed
这行得通吗?:
#this is a function that returns a value, as well as
#print some messages
function logic(){
echo "start of logic"
echo "perform logic, to get value"
echo "ok" >&2
}
function smain(){
{ local result=$( { { logic ; } 1>&3 ; } 2>&1); } 3>&1
echo "result is >$result<"
if [ "$result" == "ok" ];then
echo "script successful"
else
echo "script failed"
fi
}
smain
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句