我一直在搜索这个网站,试图找到这个问题的答案,并且遇到了几个非常好的答案,不幸的是,它们都没有为我工作。
以下是我正在使用的脚本:
VALUE=`cat szpfxct.tmp`
export VALUE
echo " " >>$LGFILE
echo "term code " $VALUE >>$LGFILE
打开tmp文件时,我看到一个字符串(201510)应该分配给VALUE。但是,在日志文件中,它会回显"术语代码"显示$ VALUE为空。
该文件的权限正常:-rw-rw-rw- 1 oracle dba 7 Oct 26 21:30 szpfxct.tmp
。从命令行单独执行时,命令运行正常。
以下是完整的脚本:
#!/usr/bin/sh
######################################
# Create Log File
######################################
LGFILE=$HOME/szpfxct_$ONE_UP.log
export LGFILE
echo "*********************************" >$LGFILE
echo "Start SZPFXCT Fix Enrollment Counts " >>$LGFILE
echo "*********************************" >>$LGFILE
echo " " >>$LGFILE
echo "starting szpfxct" `date` >> $LGFILE
echo $BANUID >>$LGFILE
echo $PSWD
echo $ONE_UP >>$LGFILE
#####################################
# Retrieve Parameter
#####################################
sqlplus $UIPW @$BANNER_LINKS/szpfxct.sql $ONE_UP 1>> $LOG 2>&1
sqlplus baninst1/[password] <<ENDsql
set echo off
set feedback off
set verify off
set timing off
set showmode off
set time off
set pagesize 60
set serveroutput on size 1000000;
clear breaks
clear computes
ttitle off
DECLARE
output_file utl_file.file_type;
term_code stvterm.stvterm_code%TYPE;
BEGIN
output_file := utl_file.fopen('/export/home/jobsub','szpfxct.tmp','w');
SELECT substr(gjbprun_value,1,6)
into term_code
from gjbprun
where gjbprun_job = 'SZPFXCT' and
gjbprun_number = '01' and
gjbprun_one_up_no = $ONE_UP;
utl_file.put_line(output_file, term_code);
utl_file.fclose_all;
END;
/
ENDsql
#TPS
chmod 777 szpfxct.tmp
VALUE=`cat szpfxct.tmp`
export VALUE
echo " " >>$LGFILE
echo "term code " $VALUE >>$LGFILE
答案 0 :(得分:1)
试试这个。它可能会让您了解您遇到的问题:
VALUE="`cat szpfxct.tmp 2>&1`"
echo "term code '$VALUE'"
term code 'cat: szpfxct.tmp: No such file or directory'
在这个例子中,我强制文件不存在。此外,如果变量真的是空的,你会意识到它,因为每边都会有单引号。如果它只是空格,则引号之间会有一个或多个空格。
我建议这样做,因为在某些脚本中,stderr可能已被发送到您不再看到的地方。如果您的脚本中有所有这些显示的行,那么我无法解释为什么您不会看到stderr输出。另外,可能有用的是让我们知道你正在使用哪个shell解释器。我试过sh和bash,但我无法复制你的问题。这就是为什么我希望这一改变能提供更多信息。如果没有,也试试这个:
VALUE="`pwd ; cat szpfxct.tmp 2>&1`"
也许你不在你期望的目录中,并且该目录也有这样的文件,但它是空的。
答案 1 :(得分:0)
尝试获取您的文件 让我们说szpfxct.tmp的值是
VALUE = 100
在你的shell scriot中你可以做这样的事情#!/usr/bin/bash
#either
source szpfxct.tmp
#or
. .szpfxct.tmp
echo $VALUE
答案 2 :(得分:0)
使用sh(bourne shell)
来源文件. /path-to-file/filename
应该有效