我正在使用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
答案 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
脚本(如果您希望编写一个)。