2017-06-02 411 views
0

您好我正在编写一个小的shell脚本,它将从数据库中的.ctl文件加载数据,但不应该在执行脚本后在屏幕上显示输出,因为它很关键,只是想要确认这是否是正确与否:在shell脚本中运行sqlldr

#!/bin/ksh 

Y=`sqlldr usr/[email protected] control = /work/ctlm/SCRIPTS/upload.ctl` 
echo $Y > sqlldr_1 
rm -rf sqlldr_1 
+0

是否有任何理由将输出传递给变量,为什么不直接重定向。为什么要写入一个文件,然后删除它? –

+0

执行脚本后,我不希望sqlldr的输出显示在屏幕上,我该怎么办? – User123

+0

在屏幕上你有2个输出流:标准输出和标准错误,如果你不想输出,使用重定向;我的回答中的例子 –

回答

1

在外壳的空间是用来分隔参数,围绕=删除它们。 也使用变量$ Y的引号来保存格式(空格,换行符)。

#!/bin/ksh 

Y=`sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl` 
echo "$Y" > sqlldr_1 
rm -rf sqlldr_1 

如果你不希望任何输出到屏幕上,然后使用重定向

例如,删除输出

sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl >/dev/null 2>&1 

要创建2个文件out.log和err.log

sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl >out.log 2>err.log 

fd 1是隐含的,>out.log1>out.log相同可以在>和文件名 之间添加空格,但文件描述符和>之间不得有空格

+0

谢谢。很好的解释。这两个工作对我来说:-) – User123

+0

我们可以直接使用控制= upload.ctl像下面一样:'sqlldr usr/passwd @ DB control = upload.ctl'或者我们必须提供像我在我的原始文章中提到的整个路径? – User123

+0

是的,也许取决于你目前的工作目录,你可以试试。另外不要忘记投票并标记为已回答。 –