【问题标题】:Linux - Escape double quotesLinux - 转义双引号
【发布时间】:2017-02-27 02:45:42
【问题描述】:

我有一个包装脚本,它通过 ssh 远程连接到另一台服务器并运行另一个 shell 脚本,并将提供的参数作为输入参数

sshwrapper.sh "executequery.ksh SYNC N \\\"\\\" \\\"\\\" \"\\\"dt='2017-02-10'\\\"\""

当我执行上述操作时,executequery.ksh 在远程服务器上接收如下参数(按预期工作)

SYNC "" "" "dt='2017-02-10'"

但是,当我通过 Informatica 运行时,它隐式运行如下。

sh -c "command"

现在,在它替换上面的命令中,它失败了。那是

sh -c "sshwrapper.sh "executequery.ksh SYNC N \\\"\\\" \\\"\\\" \"\\\"dt='2017-02-10'\\\"\"""

请您帮忙转义双引号,但仍应设法将输入参数提供为

SYNC "" "" "dt='2017-02-10'"

【问题讨论】:

  • 如果你需要连续三个以上的反斜杠,你可能做错了。我建议你需要编写一个脚本,将脚本复制到远程机器,然后执行脚本。
  • 抱歉,我不确定我是否理解您的更正点。当您手动调用时,该命令运行良好,没有问题。只有在通过 Informatica 调用时才会失败,因为 Informatica 会将语句隐式重构为 sh -c "command"。我只需要能够转义双引号
  • 在需要时只对引号进行一次转义是正确的。所以,"executequery.ksh SYNC N \"\" ..." 是正确的。请注意单个转义符。然后,executequery.ksh 必须正确处理其参数,即使它们包含空格或引号

标签: shell


【解决方案1】:

您将工作命令包含在一层引号中...问题是您的引号不再匹配...为什么必须将命令放在双引号中?这将帮助我了解它在 informatica 中的哪个位置运行以及如何设置命令,即如果命令是一个变量,我希望它是 $$command,然后我会问你运行 sh -c $$ 时会发生什么命令?

也试试

sshwrapper.sh executequery.ksh SYNC N "" "" ""dt='2017-02-10'""

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 2013-06-17
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多