Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 一旦设置好,如何在一个heredoc变量中搜索和替换ksh?_Variables_Ksh_Multiline_Heredoc - Fatal编程技术网

Variables 一旦设置好,如何在一个heredoc变量中搜索和替换ksh?

Variables 一旦设置好,如何在一个heredoc变量中搜索和替换ksh?,variables,ksh,multiline,heredoc,Variables,Ksh,Multiline,Heredoc,我在ksh方面没有丰富的经验,在我试图修改的脚本中使用多行变量时遇到了困难。基本上,我希望去掉结果输出的第一部分,直到出现一些“CAMP”文本,然后保留后面的内容。结果通过电子邮件发送。不过,我所尝试的似乎不起作用 这是多行部分。变量是预先设置的。我已经删除了确切的SQL $ORACLE_HOME/bin/sqlplus -s << EndOfSql > ${LOG_FILE} $USERPASS@$ORACLE_SID SQL goes here with

我在ksh方面没有丰富的经验,在我试图修改的脚本中使用多行变量时遇到了困难。基本上,我希望去掉结果输出的第一部分,直到出现一些“CAMP”文本,然后保留后面的内容。结果通过电子邮件发送。不过,我所尝试的似乎不起作用

这是多行部分。变量是预先设置的。我已经删除了确切的SQL

   $ORACLE_HOME/bin/sqlplus -s << EndOfSql > ${LOG_FILE}
   $USERPASS@$ORACLE_SID
   SQL goes here with some other SET stuff
/
   EXIT;
EndOfSql
$ORACLE\u HOME/bin/sqlplus-s${LOG\u FILE}
$USERPASS@$ORACLE\u SID
SQL与其他一些集合一起使用
/
出口
EndOfSql
然后,最终会像这样将电子邮件发送到MAIL_ID中的电子邮件地址:

   mailx -s "Email subject line"\
       $MAIL_ID < $LOG_FILE;
mailx-s“电子邮件主题行”\
$MAIL\u ID<$LOG\u文件;
如前所述,我试图做的是去掉结果中的所有内容,直到从SQL输出中删除heredoc结果中的一些“CAMP”文本。我曾经尝试过这样的方法,但我很难理解herdoc和变量,因为有很多方法:

CNTNT=${LOG_FILE#*CAMP}

  mailx -s "Email subject line"\
      $MAIL_ID < $CNTNT;
CNTNT=${LOG_文件#*CAMP}
mailx-s“电子邮件主题行”\
$MAIL_ID<$CNTNT;

你有什么建议或资源可以告诉我吗?非常感谢。

正如我在之前的评论中提到的,看起来您正在尝试 将输出捕获到变量中,但实际上是将其发送到文件中

作为替代方案,这可能会起作用:

# store the entire query in a function
sql_query() {
$ORACLE_HOME/bin/sqlplus -s << EndOfSql
$USERPASS@$ORACLE_SID
SQL goes here with some other SET stuff
/
EXIT;
EndOfSql
}

# capture function output
DATA=$( sql_query )

# Discard unwanted data
echo "${DATA#*CAMP}" | 
    mailx -s "Email subject line" ${MAIL_ID:?}
#将整个查询存储在函数中
sql_查询(){

$ORACLE_HOME/bin/sqlplus-s正如我在前面的评论中提到的,看起来您正在尝试 将输出捕获到变量中,但实际上是将其发送到文件中

作为替代方案,这可能会起作用:

# store the entire query in a function
sql_query() {
$ORACLE_HOME/bin/sqlplus -s << EndOfSql
$USERPASS@$ORACLE_SID
SQL goes here with some other SET stuff
/
EXIT;
EndOfSql
}

# capture function output
DATA=$( sql_query )

# Discard unwanted data
echo "${DATA#*CAMP}" | 
    mailx -s "Email subject line" ${MAIL_ID:?}
#将整个查询存储在函数中
sql_查询(){

$ORACLE_HOME/bin/sqlplus-ssql的结果存储在一个文件中。文件名由
$LOGFILE

在运行SQL之后,变量LOGFILE的值仍将与之前相同,类似于
/home/user7347759/camp.out

当您想要使用
${..#..}
结构时,首先必须用文件的内容填充另一个变量。
解析输出后,reslt存储在变量中。使用
时,sql结果存储在文件中。文件名由
$LOGFILE
给出
在运行SQL之后,变量LOGFILE的值仍将与之前相同,类似于
/home/user7347759/camp.out

当您想要使用
${..#..}
结构时,首先必须用文件的内容填充另一个变量。
解析输出后,reslt存储在一个变量中。当您使用
时,主题行显示“herdeoc variable”,您是指herdeoc内部的
$USERPASS
等吗?您意识到,当“herdeoc”文本“提交”时对于sqlplus,它已被shell扩展到其指定的值?一旦扩展完成,就没有实际的方法来更改这些值。此外,您对
${LOG_FILE}
的使用似乎与文本的使用不一致。您想要
LOG_FILE=/path/to/logfile.txt
还是
LOG_FILE_text=$(
或其他什么?如果您使用
LOG\u-TEXT=…
那么您可以使用
mailx….和
CNTNT=“${LOG\u-FILE\u-TEXT}”
祝您好运。我没有看到多行变量。相反,这里有
${LOG\u-FILE}
我希望它包含一个文件的路径。最后,当你说
${LOG#u file#*CAMP}
时,你不会删除文件的内容,而是从文件名中删除任何包含
CAMP
的文本,而不是从文件中你是说你的herdoc里面的
$USERPASS
等吗?你意识到当“herdoc”文本“提交”到sqlplus时,它已经被shell扩展到它指定的值了吗?一旦扩展完成,就真的没有实际的方法来更改这些值。还有你对
${LOG\u FILE}的使用
似乎与您的文本不一致。您想要
LOG\u文件=/path/to/logfile.txt
还是
LOG\u文件\u text=$(
或其他什么?如果您使用
LOG\u文件\u text=…
那么您可以使用
mailx…和
cnnt=“${LOG\u文件\u text}”
..祝你好运。我没有看到多行变量。相反,有
${LOG\u FILE}
我希望它包含一个文件路径。最后,如果你说
${LOG\u FILE#*CAMP}
你不会从文件名中删除文件内容,而是从文件中删除任何小于或包含
CAMP
的文本。
# Improved demonstration of what you tried
varwithlogging="$(cat "${LOG_FILE}")"
CNTNT="${varwithlogging#*CAMP}"
mailx -s "Email subject line"\
      $MAIL_ID <<< "${varwithlogging#*CAMP}"
mailx -s "Email subject line"\
      $MAIL_ID <<< "$(sed 's/.*CAMP//' "${LOGFILE}")"