ssh sqlplus 命令有 $ 符号,它被替换

ssh sqlplus 命令有 $ 符号,它被替换

我正在通过 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'

相关内容