我有两个脚本要在本地计算机 shell 中运行第一个脚本是 BASH shell,它在自身内部调用期望脚本 bash shell 如下
BASH SHELL 脚本 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 结束
还有一个我们有scp_ToTarget.exp Tcl 或 Expect 脚本,它在 bash shell 中被调用
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 、Expect 或 Tcl中解决这个问题
任何用于在 Bash/Tcl 中处理不同字符串变量的好的参考或网络链接都值得赞赏谢谢