だから私はbash内で正しく動作することを期待しようとしています。
スクリプトの内容は次のとおりです...
[root@mysql1 ~]# cat mysql_repl.sh
#!/bin/bash
read -p "Master server ip: " masterip
read -p "What is the regular user to log into the master server: " masteruser
read -p "What is the password for the regular user for the master server: " masterpass
read -p "What is the root password for the master server: " masterrootpass
read -p "Slave server ip: " slaveip
read -p "What is the regular user to log into the slave server: " slaveuser
read -p "What is the password for the regular user for the slave server: " slavepass
read -p "What is the root password for the slave server: " slaverootpass
expect -c "set slaveip $slaveip;\
set slaveuser $slaveuser;\
set slavepass $slavepass;\
set timeout -1;\
spawn /usr/bin/ssh $slaveip -l $slaveuser 'ls -lart';\
match_max 100000;
expect *password:;\
send -- $slavepass\r;\
interact;"
これがスクリプトの出力です...
[root@mysql1 ~]# ./mysql_repl.sh
Master server ip:
What is the regular user to log into the master server:
What is the password for the regular user for the master server:
What is the root password for the master server:
Slave server ip: xxx.xxx.xxx.xxx
What is the regular user to log into the slave server: rack
What is the password for the regular user for the slave server: test
What is the root password for the slave server: DVJrPey99grJ
spawn /usr/bin/ssh 198.61.221.179 -l rack 'ls -lart'
rack@198.61.221.179's password:
bash: ls -lart: command not found
コマンドが正しく実行されていません。/bin/ls も試しましたが、まだ見つかりません。
第二部...同じスクリプト...
私は bash に変数、具体的にはパスワードを持っています。この場合、パスワードは「as$5!@?」です。私がやりたいことは、各文字を調べて、それが特殊文字であるかどうかをテストし、それから脱出することです。だから例えば…
pass=as$5!@?
私がこれまでに持っているものは近いですが、特殊文字では機能しません。非特殊文字では機能します...
echo -n $pass | while read -n 1 c; do [[ "$c" = [!@#$%^&*().] ]] && echo -n "\\"; echo -n $c; done
各特殊文字の前に \ を追加する方法について考えている人はいますか?
これで問題が解決することを願っています。