在expect的spawn中使用awk命令

在正常的shell中,以下命令是正常能用的:

df -h | grep -E 'sd|vd' | awk '{print $1","$6","$2","$4}'

cat /proc/meminfo | grep -E 'MemFree|Buffers|^Cached' | awk '{sum+=$2} END {print sum}'

cat /proc/meminfo | grep 'MemTotal' | awk '{print $2}'

 

但是,如果是通过expect的spawn命令来使用,则需要转义:

get_remain_memory="cat /proc/meminfo | grep -E 'MemFree|Buffers|^Cached' | awk '{sum+=\\\$2} END {print sum}'"
get_total_memory="cat /proc/meminfo | grep 'MemTotal' | awk '{print \\\$2}'"
get_disk_size="df -h | grep -E 'sd|vd' | awk '{print \\\$1\\\",\\\"\\\$6\\\",\\\"\\\$2\\\",\\\"\\\$4}'"

expect <<EOF
    set timeout -1
    spawn ssh 192.168.0.108 "${get_remain_memory};${get_total_memory};${get_disk_size}"
    expect {
        "password" { send "echoyang\r" }
        "yes/no" { send "yes\r";exp_continue }
        eof {
            exit 1
        }
    }
    wait
EOF

cat /proc/meminfo | grep -E 'MemFree|Buffers|^Cached' | awk '{sum+=\\\$2} END {print sum}'

cat /proc/meminfo | grep 'MemTotal' | awk '{print \\\$2}'

df -h | grep -E 'sd|vd' | awk '{print \\\$1\\\",\\\"\\\$6\\\",\\\"\\\$2\\\",\\\"\\\$4}'

分别需要用三个反斜杠来转义$符号,同时,将逗号引起来的"也要被转义,因此"前面也要有三个反斜杠

 

posted @ 2022-06-01 22:36  道霖  阅读(358)  评论(0编辑  收藏  举报