2011-04-07 58 views
0

如何在阵列内执行管道命令?管内阵列

例如:

$ ORACLE_USER=user1 
$ ORACLE_PASS=password 
$ ORACLE_CONN=database1 
$ ORACLE_EXPDP_JOB_NAME=expdp-job-name 
$ ORACLE_SQLPLUS_BIN=/opt/oracle/product/10.2.0/client/bin/sqlplus 
$ ORACLE_SQLPLUS_PARAMS=(-S "${ORACLE_USER}"/"${ORACLE_PASS}"@"${ORACLE_CONN}") 
$ CMD=(echo -e \"DROP TABLE "${ORACLE_USER}".'\"${ORACLE_EXPDP_JOB_NAME}\"'\;\\nCOMMIT\;\\n\" \| ${ORACLE_SQLPLUS_BIN} "${ORACLE_SQLPLUS_PARAMS[@]}") 

$ "${CMD[@]}" 

此输出:

"DROP TABLE user1.\"${ORACLE_EXPDP_JOB_NAME}\"; 
COMMIT; 
" | /opt/oracle/product/10.2.0/client/bin/sqlplus -S user1/[email protected] 

如果我做一个eval,命令被正确执行时,被波纹管示:

$ eval "${CMD[@]}" 
DROP TABLE user1."expdp-job-name" 
         * 
ERROR at line 1: 
ORA-00942: table or view does not exist 

Commit complete. 

但是,如果内结果有一个星号“*”,我想将它存储在AV良莠不齐,EVAL命令将演绎星号,搅乱整个结果:

$ ls -l 
total 2,1M 
-rw-r--r-- 1 root root 0 2011-04-07 14:33 a.log 
-rw-r--r-- 1 root root 186K 2011-04-06 12:05 DEBUG_AD.log 
-rw-r--r-- 1 root root 1,7M 2011-04-06 10:38 REPORT.log 
-rw------- 1 root root 57K 2011-04-06 10:38 sent 

$ b=`eval "${CMD[@]}"` 
$ echo $b 
DROP TABLE user1."expdp-job-name" a.log DEBUG_AD.log REPORT.log sent ERROR at line 1: ORA-00942: table or view does not exist Commit complete. 

你有没有看到? - >a.log DEBUG_AD.log REPORT.log发送的是eval在结果上遇到星号时解释的文件。 我希望结果如上所示,没有星号的解释。

回答

1

解决了我自己!

我只需要用双引号来回显变量以检查星号解释。

echo "$b" 
DROP TABLE user1."expdp-job-name" 
        * 
ERROR at line 1: 
ORA-00942: table or view does not exist 

Commit complete. 

对不起!