在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}'
分别需要用三个反斜杠来转义$符号,同时,将逗号引起来的"也要被转义,因此"前面也要有三个反斜杠。