【发布时间】:2020-07-05 08:47:34
【问题描述】:
在 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
【问题讨论】:
-
您可以使用
smain 2>&1将标准错误重定向到标准输出。这就是你要问的吗?不熟悉 AutoSys。 -
我做不到。因为这会将错误消息也重定向到输出流。
-
改为记录到文件?
标签: bash shell stdout stderr autosys