2012-08-27 20 views
-1

我使用Linux 2.6.x.x.x
SUSE Linux Enterprise Server 10 (i586)
使用“回声”通过管道传递一个值

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

echo <value> | <command> 

但在Linux,这似乎并没有工作。

例如,我想一个Database Name传递到Oracle命令,设置Environment Variables基于它从oratab文件中读取Database

通常情况下,该命令会为运行:

. oraenv (to source environment variable settings) 

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

但是,如果我运行:echo <some_db_name> | . oraenv,它的工作原理,而不会提示,并在每个平台上的脚本很有除了这个版本的Linux。

任何想法?

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

“这似乎不工作” 是不是一个很好的问题描述。出了什么问题? –

+0

你的'oraenv'运行在一个子shell中。子shell中的环境无法传递到主进程。 –

+0

请参阅http://stackoverflow.com/a/12145810/841108这是一个非常类似问题的答案 –

回答

2

在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 
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应该work.Another方法是使用命令行参数,像

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(如果你希望写一个)。

1

你有没有尝试过这样的事情?:

回声 “表” | 。/ oraenv的 -

其中 “ - ” 手段的/ dev /标准输入