我有一个bash脚本,我想用它来启动一个expect脚本并使用一个参数向它发送密码。
问题是我的密码有几个特殊字符,每当我将它们从bash发送到期望时,我很难逃脱它们。
如果我传递一个没有特殊字符的密码,它就可以了。 但是,此密码复杂性是必需的。 我已经尝试了多种方法来逃避特殊字符,并且谷歌搜索这个问题而没有成功。我尝试使用反斜杠进行转义,并使用十六进制值替换特殊字符,并在两个脚本中尝试了各种各样的包围和引用。
以下是调用Expect脚本的Bash脚本:
#!/bin/bash
currentDate=`date +%Y-%m-%d`
DATE=$currentDate
expect_script=message_ftp
password="Pass\[word&"
zip_file="file.zip"
/mydir/$expect_script "$currentDate/$zip_file" "$DATE" "$password"
以下是期望脚本:
#!/usr/bin/expect --
set timeout 300
set file1e "[lindex $argv 0 ]"
set today "[lindex $argv 1 ]"
set password "[lindex $argv 2 ]"
#set password ="Pass\[word&" ***--If I uncomment this and comment out the line above, it works!***
set ip "sftp_User\@ftpServer"
spawn /bin/csh -f
send "/usr/bin/$ip\n"
expect "password*: "
send "$password\r"
expect "sftp>"
send "mget $file1e\r"
expect "sftp>"
send "pwd\r"
expect "sftp>"
send "lpwd\r"
expect "sftp>"
send "quit\r"
sleep 10
exit 0
=============================================== ============================
就安全问题而言(因为我打赌有人会问): 最终的目标是从bash脚本中获取外部密码实用程序的密码(可以在将来完成;但不在当前问题的范围内),然后将其发送到expect脚本。最后,没有什么是纯文本,就像现在一样。但是,在我可以进入下一步之前,我需要首先将其作为概念证明。
感谢(提前)所有试图提供帮助的人。