我正在通过 ssh 运行一些 SQLPLUS 代码。
ssh -q node1 'export ORACLE_SID=DB11D_1;ORAENV_ASK=NO;. oraenv >/dev/null 2>&1;sqlplus -s / as sysdba << ENDSQL
whenever sqlerror exit 1
alter system set wallet open identified by "Passwo$1";
exit;
ENDSQL'
看起来密码“Passwo$1”中的 $1 被替换了。这导致命令失败。
该命令最终变成由“Passwo”识别的更改系统设置钱包打开 *
ERROR at line 1:
ORA-28353: failed to open wallet
知道如何在 SQLPLUS 命令中保留“$1”吗?
我已经尝试过以下方法
- alter system set wallet open identified by \"Passwo$1\";
- alter system set wallet open identified by \\\"Passwo$1\\\";
- alter system set wallet open identified by '\""Passwo$1""\';
我无法向密码中的 $ 符号添加转义符。所以我做不到
- alter system set wallet open identified by "Passwo\$1";
谢谢
答案1
在您传递给的此处文档中sqlplus
,要么转义$
as \$
(不清楚为什么您说不能在问题中执行此操作),要么使用 or 引用整个此处文档<<'ENDSQL'
(<<\ENDSQL
如果您这样做可能更好这里的文档中没有其他需要扩展的内容)。
此外,该字符串Passwo$1
必须在此处文档中用单引号引起来。由于文档是 shell 脚本,因此仍然需要保护字符串免受解释它的 shell 的影响。您可以通过将其写为 来完成此操作'Passwo$1'
。