位置不好()';在tcsh中创建oracle数据库链接时

位置不好()';在tcsh中创建oracle数据库链接时,oracle,unix,tcsh,Oracle,Unix,Tcsh,我试着用这种方式运行一些sql,结果成功了。但在创建数据库链接时,我遇到了一个错误,即位置不正确() 此代码在tcsh中 请帮帮我 谢谢括号没有被引用,因此它们被视为shell元字符 这: 将以下内容提供给sqlplus命令: echo \ 'create database link remotec101 \ connect to "os_user" \ identified by "password" \ using \ (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)

我试着用这种方式运行一些sql,结果成功了。但在创建数据库链接时,我遇到了一个错误,即位置不正确()

此代码在tcsh中

请帮帮我


谢谢

括号没有被引用,因此它们被视为shell元字符

这:

将以下内容提供给
sqlplus
命令:

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
但“此处文档”可能更干净:

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行打印为一行。您可以根据需要调整格式字符串。

我找到了。您必须利用tcsh同时支持引号类型和
echo
允许多个参数的事实:

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

括号在被回音的字符串之外,因此由shell解析。是否有理由将连接信息放在字符串之外?我认为OP的问题是希望最后四行是字符串中的字符串string@Dan:我不知道“字符串中的字符串”是什么意思。如果OP确切地告诉我们他希望
sqlplus
命令在其stdin上看到什么,这会有所帮助。(如果我知道
sqlplus
需要什么也会有帮助。)对不起,我的意思是,他们正在向
echo
命令传递字符串,对吗?但在这里面,特别是带括号的部分,它们需要一个字符串。或者换句话说,这两个看起来不属于它们的撇号实际上是
echo
ed的主体的一部分。我发布了一个用“\”来逃避它们的回复,但显然这在tcsh中不起作用。@Dan:Hmm。真正的问题是,应该给
sqlplus
什么输入?有鉴于此,我们可以想出如何提供它。
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'
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
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 ) ) ) ' "';"