は括弧は引用されていないので、それらはシェルのメタ文字として扱われています。あなたがしたい場合
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'
:
この:
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)));
しかし、 "ここに文書が" おそらくクリーナーです最後の4行はsqlplus
への入力の単一の行になるために、私はあなたが必要と思うあなたのスクリプトの中にそれらをすべて1行に入れる。それとも、それが簡単に例えば、あなたの出力を整理する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行を出力します。必要に応じて書式文字列を調整することができます。
括弧はエコーさ文字列の外側であるので、シェルによって解析されます:あなたはtcshの両方の引用符の種類をサポートしており、
echo
は複数の引数を許可することを利用しなければなりません。文字列の外側に接続情報を置く理由はありますか? –