スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



複数の引用符が連なる行をTTLマクロで自動送信する

※引用符はASCII コードで指定すれば、下のようなことをする必要はありません。
アホとハサミは使いようというか、アホにハサミを持たせてはいけませんね!
というわけでTTLメーカーサンプルを見てください。



シェルコマンド行をTeratermマクロで自動実行するには、sendln関数に文字列を渡して記述する。
echo "Michael Jackson knows we sad. but we can not heal him"

であれば、マクロファイルには次のように書く。
sendln 'echo "Michael Jackson knows we sad. but we can not heal him"'

ここで気をつけるのは引用符だ。
sendln "echo "Michael Jackson knows we sad. but we can not heal him""
と書くと、マクロは"echo "の後ろの二重引用符を文字列リテラルの終了と解釈するので、それに続くMichael~はマクロソースとして解釈できませんという構文エラーになる。

リテラルとはソースコード中の定数のことで、多くの言語では文字列を引用符で囲んで範囲を指定する。TTLマクロも「'」と「"」を使用するので、上の問題が起こらないように使用する。

しかし、下のように1行内に両方の引用符が使われているケースでは、
MJ="Michael Jackson knows we sad. but we can not heal him"
echo "$MJ" |grep 'we' |egrep "[MJ]"
sendln 'echo "$MJ" |grep 'we' |egrep "[MJ]"'
sendlnに渡す文字列の範囲を指定しようがなくなるので使えなくなってしまう。

こういうときは、文字列に改行文字を付加しないもう一つの関数、sendを使って下のように書けば大丈夫だ。
send 'echo "$MJ" |grep '
send "'we'"
send ' |egrep "[MJ]"'
send #10
最後の#10は改行のLFで、TeraTerm画面上では元のコマンドそのままに
echo "$MJ" |grep 'we' |egrep "[MJ]"
と実行される。
しかし、こんなことを手でシコシコやっていては日が暮れてしまう。自動化する方法はないか?ということで作ってみた。面白かったのは、文字列を引用符ごとに切った配列のインデックスが偶数か奇数かどうかでsendで使うべき引用符が「'」と「"」のどっちを使うのか処理できてしまうところだった。というわけで続きは次回

スポンサーサイト



comment

Secret

while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。