使用expect时如何将命令传递给SSH,而它不支持使用双引号?

问题描述 投票:0回答:1

我正在使用内联 bash 脚本自动执行服务器的登录过程,我正在使用 Expect 来自动执行此操作,但是在登录服务器时我还想打印一条消息,我对 echo 没有任何运气,因为我在 stackoverflow 帖子中读到,它不可靠,因为我想使用颜色编码,现在我使用 printf 来执行此操作,printf 在服务器中完美工作,但是当将其传递到我的这个小脚本中时,我收到错误,我怀疑我使用大括号而不是双引号的方式有问题,如果有人能指出我将 printf 命令放在大括号中的方式有什么问题,我会很高兴。

expect -c 'spawn ssh -t MYHOST@MYSERVER {printf [\33[01;32m  A MESSAGE TO BE SHOWN  \33[01;37m]\n; bash}; expect "Password:"; send "MY PASSWORD"; interact'

我收到这些错误,我将 printf 命令放在大括号内绝对有问题:

bash: {printf: command not found bash: 32m: command not found bash: 37m]n}}: command not found 

我尝试使用双引号和多种使用大括号的方法,但没有任何运气。

谢谢大家。

bash ssh formatting expect curly-braces
1个回答
0
投票

您需要在周围加上引号

printf
:

expect -c 'spawn ssh -t  MYHOST@MYSERVER "printf '"'"'\[\\33\[01\;32m\ \ A\ MESSAGE\ TO\ BE\ SHOWN\ \ \\33\[01\;37m\]\\n'"'"'; bash"; expect "Password:"; send "secret\r"; interact'
© www.soinside.com 2019 - 2024. All rights reserved.