2012-04-23 9 views
1

'.exp'スクリプトを使用してホストの合計メモリを取得したいとします。LINUX/EXPECTを使用するホストの合計メモリを取得

ホスト内で取得した後、私は次の行を実行します。

"send "top -n 1 | grep Mem: | awk '{ print $(NF-7) }' | cut -d 'k' -f1\r"" 

スクリプトを実行している間、それは次のエラーを返します。

can't read "(NF-7)": no such variable 

しかし、ホストの内部で手動で取得する場合、および同じ行を(send部分を除いて)実行すると、それは私に期待数を返します...

私は間違っていますか?何か案が?同じことをする他の方法の提案?

事前によろしくと感謝、

アントニオ

+1

'/ procの/ meminfo'が解析しやすい:Tclは、二重引用符で囲まれた文字列で$variablesを代用しますあなたはリテラル文字列を送信するために括弧を使用したい

tutorial chapterを参照してください)。 – Mat

答えて

3

topの出力は、この方法を解析するものではありません。あなたは他の、より簡単な(より良い!)方法でメモリの量を得ることができます。

sed -n -e '/^MemTotal/s/^[^0-9]*//p' /proc/meminfo 

それともも便利なサイズで表示する方法を知っているfreeの出力、解析することができます:

# total memory in megabytes 
free -m | sed -n -e '/^Mem:/s/^[^0-9]*\([0-9]*\) .*/\1/p' 

EDITを:あなたは、常に自問する必要があり、「何を拡大する誰ですか?」で、これらのコマンドを送信するために

は期待して、これは、それ以外の処理とsedのために意図されていたでしょうexpect事柄から脱出

send "sed -n -e '/^MemTotal/s/^\[^0-9\]*//p' /proc/meminfo\n" 

# also removes kb suffix 
send "sed -n -e '/^MemTotal/{s/^\[^0-9\]*//;s/ .*//p}' /proc/meminfo\n" 

# displays in megabytes 
send "free -m | sed -n -e '/^Mem:/{s/^\[^0-9\]*//;s/ .*//p}'\n" 

を試してみてください。

ここにオリジナルの(適切にエスケープされた)バージョンがあります。

send "top -n 1 | grep Mem: | awk '{ print \$(NF-7) }' | cut -d 'k' -f1\n" 
+0

こんにちは、あなたの返信ありがとう、しかし、私の場合、完全にフィットしていない、最初のソリューションでは、文字 'kBのメモリサイズを返し、最後に追加... "| cut -d' k ' f1 "は、私が望むものを返します。また、2番目のソリューションは、メモリ内の総数を知りたいホストの数値を正しく返します...しかし、私の '.exp'スクリプトで紹介すると、次のエラーが返されます。コマンド名 "^ 0-9"どちらの場合でも... – Antonio

+0

@Antonio:問題を引用していると思われます(これは確かにオリジナルの問題でした)。 – Sorpigal

2

期待はTcl拡張です。

send {top -n 1 | grep Mem: | awk '{ print $(NF-7) }' | cut -d 'k' -f1} 
send "\r" 
関連する問題