在 set 命令中使用变量——Linux shell 脚本

using variable inside set command -- Linux shell script

我想在 set 命令中使用变量。可以使用吗?当我使用它时无法识别

 set MYVAR [lindex $argv 0]
 set servername [lindex $argv 1]
 set osusername [lindex $argv 2]
 spawn ssh "osusername@$servername"
 expect "password:"
 send "$MYVAR\r"
 send "/hyp_util/PasswordChanges/automation/deleteexistingentry.sh\r"
 set cmd [format {cat "/home/currentosusername/.ssh/id_rsa.pub" | ssh "$osusername@$servername" 'cat >> /home/$servername/.ssh/authorized_keys'}]
 spawn sh -c "$cmd"
 expect "password:"
 send "$MYVAR\r"
 send "exit\r"
 interact

没有错误,但无法识别 set 命令中的 servnameosusername 变量

set cmd [format {cat "/home/currentosusername/.ssh/id_rsa.pub" | ssh "$osusername@$servername" 'cat >> /home/$servername/.ssh/authorized_keys'}]

您有这些定义:

set servname [lindex $argv 1]
set osusername [lindex $argv 2]

以及这些替换:

set cmd [format {cat "/home/currentosusername/.ssh/id_rsa.pub" | ssh "$osuername@$servername" 'cat >> /home/$servername/.ssh/authorized_keys'}]

在这里,您试图用 osuername 代替 osusername,用 servername 代替 servname。名字要对应。

此外,大括号 ({ }) 防止变量替换。您可以通过使用 format 命令插入值来解决这个问题:

set cmd [format {cat "/home/currentosusername/.ssh/id_rsa.pub" | ssh "%1$s@%2$s" 'cat >> /home/%2$s/.ssh/authorized_keys'} $osusername $servname]

文档: format