括號沒有引用,所以它們被視爲shell元字符。
此:
echo \
'create database link remotec101 \
connect to "os_user" \
identified by "password" \
using \
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) \
(HOST=c101) \
(PORT=1521)) \
(CONNECT_DATA=(SID=XE)));' | sqlplus
將飼料以下爲sqlplus
命令:
create database link remotec101
connect to "os_user"
identified by "password"
using
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=c101)
(PORT=1521))
(CONNECT_DATA=(SID=XE)));
但是 「這裏的文件」 可能是更清潔:
sqlplus <<'EOF'
create database link remotec101
connect to "os_user"
identified by "password"
using
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=c101)
(PORT=1521))
(CONNECT_DATA=(SID=XE)));
'EOF'
如果你想最後4行成爲sqlplus
的單行輸入,我想你需要把它們全部放在腳本的一行中。或者,你可能會發現它更容易使用的printf
命令來組織你的輸出,例如:
printf '%s\n%s\n%s\n%s\n%s %s %s %s\n' \
'create database link remotec101' \
'connect to "os_user"' \
'identified by "password"' \
'using' \
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)' \
'(HOST=c101)' \
'(PORT=1521))' \
'(CONNECT_DATA=(SID=XE)));' | sqlplus
將打印出最後4線爲單線。您可以根據需要調整格式字符串。
的括號外的字符串被呼應,所以由殼解析。你有沒有把連接信息放在字符串之外的原因? – 2012-01-02 20:19:45