-1

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

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

echo <value> | <command>

但是Linux,这似乎不起作用。

例如,我想将 a 传递给根据从文件中读取的内容设置Database Name的命令。OracleEnvironment VariablesDatabaseoratab

通常,该命令将运行为:

 . oraenv   (to source environment variable settings)

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

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

有任何想法吗?

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

3 回答 3

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
于 2012-08-27T23:38:20.433 回答
1

您是否已经尝试过这样的事情?:

回声“表” | ./oraenv -

其中“-”表示 /dev/stdin

于 2012-08-28T02:58:20.710 回答
0

所以如果我理解正确,你想设置 user 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脚本(如果你想写一个)。

于 2012-08-28T00:58:08.283 回答