我一直在搜索这个网站,试图找到这个问题的答案,并发现了几个非常好的答案,不幸的是,它们都不适合我。
这是我正在使用的脚本:
VALUE=`cat szpfxct.tmp`
export VALUE
echo " " >>$LGFILE
echo "term code " $VALUE >>$LGFILE
打开 tmp 文件时,我看到一个应分配给 VALUE 的字符串 (201510)。但是,在日志文件中,它回显“术语代码”,显示 $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
最佳答案
试试这个。它可能会让您了解您遇到的问题:
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`"
也许你不在你期望的目录中,而那个目录也有这样的文件,但它是空的。
关于shell - 如何将文件中的值分配给 UNIX sh shell 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590554/