gpt4 book ai didi

linux - 在 expect 脚本中执行 shell 命令时无法读取此类变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:41 24 4
gpt4 key购买 nike

我有下面的代码。目标是

  1. 获取匹配特定起始字符的最新文件
  2. 对该文件进行scp

#!/usr/bin/bash
#!/usr/bin/expect -f
ztools=$(ls -t|find -name '/home/user/releases/ztools*.tar.gz'|head -n1)
ztools=$(echo $ztools | cut -c 3-)

# connect via scp and transfer ztools
spawn scp /home/user/releases/${ztools} user@xx.xx.xx.xx:/home/user
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "Password\r"
}
}
interact

但是当我运行它时,我得到以下错误谁能帮我解决这个问题

can't read "(ls -t|find -name '/home/zadmin/releases/ztools*.tar.gz'|head -n1)":    no such variable
while executing
"ztools=$(ls -t|find -name '/home/zadmin/releases/ztools*.tar.gz'|head -n1)"
(file "copy_ztools_cust.sh" line 2)

最佳答案

您似乎在那里组合了两个脚本。一个 shell 脚本和一个 expect 脚本。

这一行是 shell 脚本的 shebang 行

#!/usr/bin/bash

这一行是 expect 脚本的 shebang 行

#!/usr/bin/expect -f

这些行是shell代码

ztools=$(ls -t|find -name '/home/user/releases/ztools*.tar.gz'|head -n1)
ztools=$(echo $ztools | cut -c 3-)

这些行是 expect/tcl 代码

# connect via scp and transfer ztools
spawn scp /home/user/releases/${ztools} user@xx.xx.xx.xx:/home/user
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "Password\r"
}
}
interact

如果您希望它能正常工作,您需要将这些行拆分回单独的代码位。

此外,这些 shell 行根本没有做你想做的事情,也不是正确的方法。

我不相信管道的 ls -t 位能为您做任何事情,因为我根本不相信 find 从标准输入中读取数据。

ztools*.tar.gz 文件名的排序方式是否对您有用,还是您需要按照文件的修改时间排序?

如果文件名按字母顺序为您排序,那么您可能想要的是

ztools=(/home/zadmin/releases/ztools*.tar.gz)
ztools=${ztools[0]}

如果文件名不按字母顺序排序(但可以使用 sort 排序)那么您可能想要

ztools=$(printf '%s\0' /home/zadmin/releases/ztools*.tar.gz | sort -z)
ztools=${ztools[0]}

如果文件名也不能使用 sort 进行排序,并且确实需要修改时间,那么如果您的文件名保证不包含任何空格/换行符/glob元字符/等。然后你可以使用(但请注意,面对这样的文件名,这根本不安全)

ztools=$(ls -t | head -n1)

如果你不能确定你要处理的文件名(通常你不应该赌它,即使你相信你可以)并且修改时间仍然是必要的那么你被迫使用更像this answer .

关于linux - 在 expect 脚本中执行 shell 命令时无法读取此类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com