【发布时间】:2017-05-12 06:14:10
【问题描述】:
我在 ksh 方面没有丰富的经验,并且我在尝试修改脚本中的多行变量时遇到了困难。基本上,我希望删除结果输出的第一部分,直到一些“CAMP”文本并保留之后的任何内容。结果将通过电子邮件发送。不过,我尝试过的方法似乎不起作用。
这是多行部分。变量是事先设置好的。我已经删除了确切的 SQL。
$ORACLE_HOME/bin/sqlplus -s << EndOfSql > ${LOG_FILE}
$USERPASS@$ORACLE_SID
SQL goes here with some other SET stuff
/
EXIT;
EndOfSql
然后最终像这样使用它来将电子邮件发送到 MAIL_ID 中的电子邮件地址:
mailx -s "Email subject line"\
$MAIL_ID < $LOG_FILE;
如前所述,我想要做的是删除结果中的所有内容,直到 SQL 输出中的 heredoc 结果中的一些“CAMP”文本。我已经尝试过这样的事情,但是很难理解heredoc和变量,因为那里有很多方法:
CNTNT=${LOG_FILE#*CAMP}
mailx -s "Email subject line"\
$MAIL_ID < $CNTNT;
您有什么建议或资源可以指点我吗?将不胜感激。
【问题讨论】:
-
你的主题行说“heredoc 变量”是指你的heredoc 中的
$USERPASS等吗?您是否意识到,当“heredoc”文本“提交”到 sqlplus 时,它已被 shell 扩展为其指定值?一旦扩展完成,就没有实际的方法来改变这些值。此外,您对${LOG_FILE}的使用似乎与您的文字内容不一致。你想要LOG_FILE=/path/to/logfile.txt或LOG_FILE_TEXT=$(< /path/to/logfile.txt还是别的什么?如果你使用LOG_FILE_TEXT=...,那么你可以使用mailx .... <<< "$LOG_FILE_TEXT" -
和
CNTNT="${LOG_FILE_TEXT#*CAMP}"。 . . . .祝你好运。 -
我没有看到多行变量。取而代之的是
${LOG_FILE},我希望它包含一个文件的路径。最后,在你说${LOG_FILE#*CAMP}的地方,你并没有删除文件的内容,而是从文件名中删除任何直到并包括CAMP的文本,而不是从文件中删除。
标签: variables ksh multiline heredoc