【问题标题】:SFTP dollar sign issue when sending password in Unix在 Unix 中发送密码时的 SFTP 美元符号问题
【发布时间】:2017-10-05 14:58:02
【问题描述】:

我需要将文件 SFTP 到服务器。密码有一个美元符号$,我需要转义它。

我尝试了可以​​替换的 Perl 和 sed 命令,但没有添加 $ 之后的字符串。

示例:

echo "Np4$g" | perl -pe 's/$/\\\\\$/g'

输出

Np4\\$

它应该是Np4\\$g,但g 没有被附加。

代码:

/usr/bin/expect <<EOF
set timeout -1
spawn sftp -C -oPort=$port $sftp_username@$host_name
expect "password:"
send "$password\r"
expect "sftp>"
cd $remote_dir
send "mput *.txt\r"
expect "sftp>"
send

【问题讨论】:

标签: perl unix sed


【解决方案1】:

我建议不要逃避和替换

"Np4$g"

通过

'Np4$g'

【讨论】:

    【解决方案2】:

    你的命令

    echo "Np4$g" | perl -pe 's/$/\\\\\$/g'
    

    失败有两个原因

    • "Np4$g" 中,shell 将变量g 插入到双引号字符串中。它可能没有被定义,所以它被替换为空,你只是将Np4 传递给 perl。您需要使用单引号来防止插值

    • 在 Perl 替换 s/$/\\\\\$/g 中,模式中的 $ 匹配字符串的结尾,而不是文字美元。这意味着Np4 更改为Np4\\$。您需要转义模式中的美元符号以使其匹配文字 $

    这将正常工作

    echo 'Np4$g' | perl -pe 's/\$/\\\$/g'
    

    输出

    Np4\$g
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-09
      • 2020-11-06
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多