使用“echo”通过管道传递值

时间:2012-08-27 23:24:22

标签: linux oracle pipe echo

我正在使用Linux 2.6.x.x.x
SUSE Linux Enterprise Server 10 (i586)

我想知道的问题是如何通过管道将值传递给命令?
在其他所有操作系统上,包括DOS,我都可以使用:

echo <value> | <command>

但在Linux上,这似乎不起作用。

例如,我想将Database Name传递给Oracle命令,该命令根据Environment Variables的内容为Database设置oratab文件。

通常,命令将以:

运行
 . oraenv   (to source environment variable settings)

然后,它会提示您输入数据库名称。

但是,如果我运行:echo <some_db_name> | . oraenv,它可以在没有提示的情况下工作,并且在除了这个版本的Linux之外的每个平台上的脚本中都很有用。

有什么想法吗?

$ <> /home/oracle>echo $SHELL   
/bin/bash

3 个答案:

答案 0 :(得分:3)

在Unix上,管道用于传递另一个程序输入的程序输出。

例如:

$ echo "b c a e d" | tr " " "\n" | sort 
a
b
c
d
e

来自http://www.orafaq.com/wiki/Oraenv

非交互式(方便脚本编写):

$ export ORACLE_SID=orcl
$ export ORAENV_ASK=NO
$ . oraenv

答案 1 :(得分:1)

你有没有试过这样的东西?:

  回声&#34;表&#34; | ./oraenv -

哪里&#34; - &#34;表示/ dev / stdin

答案 2 :(得分:0)

因此,如果我理解正确,您需要设置用户profile。通常,环境变量在EXPORTED文件中为profile。但是,如果您想构建自己的配置文件,可以向用户询问值,例如

echo "Enter the DB Name:"    #This is optional but can be used in case if someone runs the script like $ . ./oraenv
read ORACLE_SID    # ORCL_SID is a variable
. oraenv

oraenv中放置上述内容之后,echo <db name>|. ./oraenv命令应该可以正常工作。另一种方法是使用命令行参数,如

if [ $# -lt 1 ]             # $# is the number of arguments passed to the script
then
    echo "DB Name must be entered"
    exit 0
else
    ORACLE_SID =$1             # initialize $1 is the first arg which is the db name, consecutive args can be accessed by $2, $3 and so on.
    . oraenv
fi

完成上述操作后,下面的命令就可以了。

$ . ./oraenv oradev

说完这一切之后,oraenv实用程序是一个Oracle实用程序,您将无法编辑或修改该实用程序。因此,在运行EXPORTING之前,最好的方法是oraenv变量,上面的解决方案将适用于自定义oraenv脚本(如果您希望编写一个)。