shell - 如何将文件中的值分配给 UNIX sh shell 中的变量?

标签 shell unix

我一直在搜索这个网站,试图找到这个问题的答案,并发现了几个非常好的答案,不幸的是,它们都不适合我。

这是我正在使用的脚本:

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/

相关文章:

旨在在 Solaris 中自行重启的 C 程序

bash - 使用 `read` 时如何启用向上/向下箭头键以显示以前的输入?

unix - 在 solaris 中使用 ps 看不到完整命令

linux - 连接文件夹中的大量文件时参数列表太长

shell - 是否存在在 Common Lisp 中运行外部程序的标准方法?

linux - Tru64 上的 sendto 正在返回 ENOBUF

qt - 杀死停止并恢复的 QProcess

c - 如何使用shell命令刷新

bash - 如何使存储在变量中的 bash 颜色代码可供外部脚本使用

linux - 用于创建文件夹和移动文件的 bash 脚本