Regex Expect语句提示符

Regex Expect语句提示符,regex,tcl,expect,Regex,Tcl,Expect,我正在尝试匹配提示,但括号(|#)中的OR语句无效 以下仅适用于%结束提示,不适用于#结束提示: set FULLPROMPT "${HOST} (.+)(%|#) $" 以下内容对于任何提示都不起作用:/: set FULLPROMPT "${HOST} (.+)% $" 我显然错过了一些东西 提示可以是这样的 12:33 user@hostname ~% 12:33 root@hostname /usr/local/folder# Expect正在运行 set HOST "hostna

我正在尝试匹配提示,但括号
(|#)中的OR语句
无效

以下仅适用于%结束提示,不适用于#结束提示:

set FULLPROMPT "${HOST} (.+)(%|#) $"
以下内容对于任何提示都不起作用:/:

set FULLPROMPT "${HOST} (.+)% $"
我显然错过了一些东西

提示可以是这样的

12:33 user@hostname ~%
12:33 root@hostname /usr/local/folder#
Expect正在运行

set HOST "hostname"
set FULLPROMPT "${HOST} (.+)(%|#) $"
send "\n"
expect -re $FULLPROMPT

非常感谢Schelte Bron提供的任何帮助,我现在可以准确地看到正则表达式如何匹配提示。 结果是提示有颜色,这会在
%
#
之前和之后放置所有类型的字符

要克服这个问题,你可以

  • 在提示符PS1变量上方
  • 注意正则表达式中提示的所有隐藏字符
  • 在登录时捕获提示并在正则表达式中使用它(似乎是我们应该做的,但这似乎需要做很多工作)
  • 在调试模式下运行expect:

    expect -d 
    

    多亏了Schelte Bron,我现在可以准确地看到正则表达式如何匹配提示。 结果是提示有颜色,这会在
    %
    #
    之前和之后放置所有类型的字符

    要克服这个问题,你可以

  • 在提示符PS1变量上方
  • 注意正则表达式中提示的所有隐藏字符
  • 在登录时捕获提示并在正则表达式中使用它(似乎是我们应该做的,但这似乎需要做很多工作)
  • 在调试模式下运行expect:

    expect -d 
    

    您的正则表达式在
    %
    之后有空格
    (.+)(|#)$
    ?您检查过了吗?是的,在%和#我怀疑您的输入字符串可能在
    %
    #
    之后没有空格?输入字符串是什么意思?提示如下:
    13:02user@hostname~%cmd
    13:02root@hostname/home/user#cmd
    提示中是否有彩色或粗体字符?这可能会在#之后放置ansi转义序列,而不是空格。使用
    expect-d
    运行脚本以查看实际情况。您的正则表达式在
    %
    \
    之后有空格
    (.+)(|#)$
    ?您检查过了吗?是的,在%和#我怀疑您的输入字符串可能在
    %
    #
    之后没有空格?输入字符串是什么意思?提示如下:
    13:02user@hostname~%cmd
    13:02root@hostname/home/user#cmd
    提示中是否有彩色或粗体字符?这可能会在#之后放置ansi转义序列,而不是空格。使用
    expect-d
    运行脚本以查看实际情况。重写提示是最简单的解决方案之一,FWIW。重写提示是最简单的解决方案之一,FWIW。