ローカル コンピューター シェルで実行する 2 つのスクリプトがあります。最初のスクリプトは、内部で期待スクリプトを呼び出す BASH シェルです。bash シェルは次のとおりです。
BASH シェルスクリプト SaveOnRemote.sh
#!/bin/bash
REMOTE_IP_ADDR="192.168.100.67"
REMOTE_PASS="some_pass_with_whitespaces"
#The following line space is defined {\ }
PC_EXEC_FILE="/home/workspace/prog/Modified\ code/test/test_file"
#The following line space is included in the variable
TARGET_EXEC_FILE="/sd/1/test/test file target dir/target_file"
#Calling the expect script
scp_ToTarget.exp $REMOTE_PASS $REMOTE_IP_ADDR $PC_EXEC_FILE $TARGET_EXEC_FILE
BASH スクリプト SaveOnRemote.sh の終わり
もう 1 つ 、bash シェル内で呼び出されるscp_ToTarget.exp Tcl または Expect スクリプトがあります。
Tcl 期待 SCRIPT scp_ToTarget.exp
#!/usr/bin/expect -f
set remote_password [lrange $argv 0 0]
set remote_ipaddr [lrange $argv 1 1]
set src [lrange $argv 2 2]
set dst [lrange $argv 3 3]
set timeout 3
log_user 1
eval spawn scp $src root@$remote_ipaddr:$dst
match_max 100000
#Look for passwod prompt
set timeout 5
expect {
"*?assword:*" {
send $remote_password\r\n
}
}
## End of Tcl Expect SCRIPT scp_ToTarget.exp
このスクリプトが機能せず、不明なディレクトリ/ファイル エラーが発生します
実際、ファイル名、パスワード、さらにはディレクトリにもスペースを避けることはできず、スクリプトを機能させる必要があります。
私の知る限り、次のようなコマンドを送信した場合
scp "/tmp/try me.txt" root@192.168.100.67:"/sd/no tries/"
それは機能し、空白に問題はありません。しかし、Tcl で二重引用符を追加するとすぐに
"$src" または \"$src\" または "'$src'"
それらのどれも私が望むように正確に構文を作成しません.Tclは二重引用符を中括弧に変更します.
Bash/Tcl でさまざまな文字列変数を処理するための適切なリファレンスまたは Web リンクを歓迎します