我遇到了一个问题,旧版ksh脚本中的ksh命令在一个环境中的行为很奇怪,而在另一个环境中却没有。
这2个环境具有:
.profile
中的内容几乎相同cat /proc/version
的输出相同
Linux版本3.10.0-514.10.2.el7.x86_64(mockbuild@x86-039.build.eng.bos.redhat.com)(gcc版本4.8.5 20150623(Red Hat 4.8.5-11)( GCC))#1 SMP 2017年2月20日星期一东部标准时间
locale
的相同输出:
LANG = C
LC_CTYPE =“ C”
LC_NUMERIC =“ C”
LC_TIME =“ C”
LC_COLLATE =“ C”
LC_MONETARY =“ C”
LC_MESSAGES =“ C”
LC_PAPER =“ C”
LC_NAME =“ C”
LC_ADDRESS =“ C”
LC_TELEPHONE =“ C”
LC_MEASUREMENT =“ C”
LC_IDENTIFICATION =“ C”
LC_ALL =
在此旧版ksh脚本中,有一个函数谁
\r
特征,echo
返回该变量的值作为函数的结果这是此功能的实现示例
function get_value {
# A temp file to store sql query result
TEMP_FILE="/tmp/get_value_tmp.txt"
# here's a bloc of code that executes a sql query
# then store the result in ${TEMP_FILE}
# execute_sql_query is just a pseudocode who launches database request program
if execute_sql_query << EOF
# ...
# code do send request against database
# write the result to the tmp file ${TEMP_FILE}
# ...
EOF
then
# removing the title (column name) and \r characte from the temporary file
# assign the value to a variable RET
RET=`tail -n +2 $TEMP_FILE | tr -d '\r'`
# the varible is returned as the result of this function
echo $RET
else
# in case of sql query execution fails
# CR is a variable who gets error code of execute_sql_query
CR=$?
# retrun error code as function result
echo $CR
fi
}
sql查询的结果已导出到${TEMP_FILE}
,在此${TEMP_FILE}
中,我们有:
val_str
?
当变量RET
获得值?
奇怪的是,
0
,因为它将$RET
解释为$?
?
函数get_value
在ksh脚本script_A.ksh
中
script_A.ksh
在另一个ksh脚本script_B.ksh
中被调用
script_B.ksh
nohup ksh script_B.ksh &
作为后台作业启动
有人遇到过同样的问题吗,请问有人有分析这个问题的想法吗?
谢谢。