期待,sed和变量替换

时间:2016-04-12 02:56:06

标签: bash sed expect

我从bash脚本调用expect脚本并传递一个参数用于sed字符串替换。

但它在sed语句中错误输出变量的b / c。对于如何解决这个问题,有任何的建议吗?我试过逃避\/,但没有太大的成功。

参数成功传递(cde)

代码:

#!/usr/bin/expect -f
# ./sshlogin.exp uptime
set hosts {myhost.com}
set user root
set password xxxx
set mount [lindex $argv 0]
foreach vm $hosts {
    set timeout -1
    # now ssh
    spawn ssh $user@$vm -o StrictHostKeyChecking=no
    match_max 100000 # Look for passwod prompt
    expect "*?assword:*"
    # Send password aka $password
    send -- "$password\r"
    # send blank line (\r) to make sure we get back to gui
    expect "]# "
    send "sed -e -i 's/abc/${mount}/g' /my/files.new\r"
    expect "]# "
    sleep 1
    send -- "exit\r"
expect eof }

错误:

# sed -e 's/abc/cde
> /g' /my/files.new
sed: -e expression #1, char 37: unterminated `s' command

1 个答案:

答案 0 :(得分:2)

什么是破碎

以下是无效的调用:

.whl

它无效,因为:

  1. 引用的表达式与pip3 install pygame-1.9.2a0-cp35-none.win32.whl 标志无关。
  2. pygame-1.9.2a0-cp35-none-win32.whl is not a supported wheel on this platform. 可能包含换行符或前导/尾随空白字符。
  3. 如何修复

    为了解决您的问题,您应该:

    1. 切换命令行参数。
    2. 确保为sed -e -i 's/abc/${mount}/g' 标志提供了一个参数(例如一个空字符串),以便它可以与非GNU sed一起使用。
    3. 使用-e mount 变量中删除所有换行符或前导/尾随空格。
    4. 例如:

      ${mount}