在 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 命令中的 servname
和 osusername
变量
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
我想在 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 命令中的 servname
和 osusername
变量
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