• 締切済み

expectでコマンド実行結果を変数に代入出来ない

test.sh #!/bin/sh expect -c " set timeout -1 spawn telnet $1 expect "login:" ; send \"username\r\" expect "sword:" ; send \"password\r\" expect ${1} ; send \"start shell\r\" expect ${1} ; send \"set val=`date +%Y'-'%m%d`\r\" expect ${1} ; send \"echo $val\r\" expect ${1} ; send \"exit\r\" expect ${1} ; send \"exit\r\" exit " 例えばリモートホスト側で コマンド date +%Y'-'%m%d の実行結果を valに代入したいのですが 代入結果をechoコマンドで表示させても上記コマンド実行結果が 変数に代入されていないのか何も表示されません リモートホストに変数valを表示させるのがうまくいっていないんじゃないかと 思うのですが特殊文字($val)を正しく変数として解釈させる方法をご教示いただけませんでしょうか?

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

setコマンドを使っているということは、ログイン先はcshということで合ってますか? expect ${1} ; send \"echo $val\r\" のところは、 expect ${1} ; send \"echo \$val\r\" に直せばいいと思います。\ を付けないと、このスクリプトを実行する環境での $val に置き換わります。

scubapro_
質問者

お礼

notnotさん コメントありがとうございます。 リモートシェルは、JUNOSが載ってるルータでcshではないのですが おっしゃる通りsetコマンド使わないといけないのでcsh系です ルータ側では問題ないのですがスクリプトを置けないため リモートからハンドルするしかなくて ご指示の通り$をエスケープしてみたんですが、実行結果は以下のようになりました % set val=20110202 % can't read "val": no such variable while executing "send "echo $val\r"" リモートホストに渡す前に$が解釈されてしまってるような気がします また、エスケープしていないときは以下の通りです % set val=20110202 % echo % exit exit

関連するQ&A

専門家に質問してみよう