2012-08-27 18 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 /標準輸入