私の目標:ユーザーから入力を受け取り、あるサーバーから別のサーバーにscpを自動化します。課題:ターゲットにアクセスできるユーザーがソースサーバーにもアクセスできるため、サーバー間でSSH認証ホストの同等性を設定できません。したがって、必要です。プロンプトが表示されたときにパスワードを入力し、scpを実行する既存の方法を設定します。
これは私のコードです
L_SRC_SID=source
L_SID=target
MOUNT_POINT=app07
SERVICE_PASS=some$value
APP_SERVER_1=hostname
SRC_MOUNT_POINT=app01
#And now transfer the file over
/usr/bin/expect -c "
set timeout 1
cd /$MOUNT_POINT/$L_SID/apps
spawn scp -pr * apps@$APP_SERVER_1:/$SRC_MOUNT_POINT/$L_SRC_SID/apps .
expect yes/no { send yes\r ; exp_continue }
expect password: { send $SERVICE_PASS\r }
expect 100%
sleep 1
exit
"
exit
課題:1. SERVICE_PASS変数にsome $ valueを割り当てることはできません。 2.パスワードに$文字を含む変数を使用してExpect sendスクリプトを機能させる方法。次のエラーで失敗します。
password: can't read "value": no such variable
助けてくれてありがとう。
提案どおりにコードを変更しましたが、まだ同じエラーが発生します。
L_SRC_SID=source
L_SID=target
MOUNT_POINT=app07
SERVICE_PASS='some$value'
APP_SERVER_1=hostname
SRC_MOUNT_POINT=app01
#And now transfer the file over
/usr/bin/expect -c "
set timeout 1
cd /$MOUNT_POINT/$L_SID/apps
spawn scp -pr * apps@$APP_SERVER_1:/$SRC_MOUNT_POINT/$L_SRC_SID/apps .
expect yes/no { send yes\r ; exp_continue }
expect password: { send $SERVICE_PASS\r }
expect 100%
sleep 1
exit
"
exit
これは完全なエラーです。
password: can't read "value": no such variable
while executing
"send some$value\r "
invoked from within
"expect password: { send some$value\r }"
ベストアンサー1
この場合、値を一重引用符で囲む必要があります。
'some$value'
二重引用符は""
ファイル名拡張を抑制しますが、変数拡張は抑制しません。
$ value="some$value"
$ echo $value
some
一重引用符は''
ファイル名と変数の拡張を抑制します。
$ value='some$value'
$ echo $value
some$value
バックティックを使用``
すると、変数の拡張が可能です。
$ value=`some$value`
$ echo $value`
$
$
したがって、、、などの文字拡張を抑えて!
一"
重/
引用符を使用してください!