家の中でのこだわりスペースはどこですか?

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)を正しく変数として解釈させる方法をご教示いただけませんでしょうか?

A 回答 (1件)

setコマンドを使っているということは、ログイン先はcshということで合ってますか?



expect ${1} ; send \"echo $val\r\"
のところは、
expect ${1} ; send \"echo \$val\r\"
に直せばいいと思います。\ を付けないと、このスクリプトを実行する環境での $val に置き換わります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2011/02/02 13:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報