Tcl 写入文件时脚本文件名应过长

Tcl 写入文件时脚本文件名应过长,tcl,expect,Tcl,Expect,我对编码是新手,这是我的第一个脚本。它一直工作到必须打开(创建)要写入的文件为止。然后,它无法给我一个错误somepassedNickvariable.txt文件名太长。我以用户“qbot”的身份运行它 第一个expect的示例输出: 2016-08-05T23:32:42 73600,565 INF Chat: 'Quadro': !ustawdomek 第二个示例的输出: 1. id=51890, Pepesza, pos=(473,1, 42,1, 1223,7), rot=(-66,1

我对编码是新手,这是我的第一个脚本。它一直工作到必须打开(创建)要写入的文件为止。然后,它无法给我一个错误somepassedNickvariable.txt文件名太长。我以用户“qbot”的身份运行它

第一个expect的示例输出:

2016-08-05T23:32:42 73600,565 INF Chat: 'Quadro': !ustawdomek
第二个示例的输出:

1. id=51890, Pepesza, pos=(473,1, 42,1, 1223,7), rot=(-66,1, 104,1, 0,0), remote=True, health=97, deaths=6, zombies=138, players=1, score=109, level=35, steamid=xxx, ip=xx.xx.xx.xx, ping=111
2. id=1141, Quadro, pos=(465,6, 87,1, -624,1), rot=(-30,9, 1620,0, 0,0), remote=True, health=187, deaths=1, zombies=525, players=0, score=520, level=84, steamid=xxx, ip=xx.xx.xx.xx, ping=24
Total of 6 in the game
任何帮助都将不胜感激,因为我自己无法让它工作

#!/usr/bin/expect
set timeout -1
spawn telnet localhost 8081
expect "Please enter password" {sleep 3; send "blahblah\r" }

while {1} {
expect \
{
  "*INF Chat: '*': !ustawdomek" {
            regexp {'(.+)':\s\!ustawdomek} $expect_out(buffer) match Nick;
            set listplayers "*Total of * in the game";
            send "lp\r"
            expect $listplayers {
regexp "$Nick\,\\spos\=\\(\(\(\[-\]\?\\d+\)\,\\d\,\\s\(\[-\]\?\\d+\)\,\\d\,\\s\(\[-\]\?\\d+\)\,\\d\)\\)" $expect_out(buffer) match lok lok1 lok2 lok3
                    set file [open "/home/qbot/domki/$Nick.txt" w]
                    puts $file "$lok1 $lok2 $lok3"
                    close $file
                    send "pm $Nick \"\[QBOT\]Blahblah\"\r" }

             }
   timeout {break}
   eof {break}
}
}

我不完全理解这个脚本的语法。但我猜它与
regexp{'(.+):\s\!ustawdomek}$expect_out(buffer)match Nick有关

+
本身就是一个贪婪的正则表达式,应该尽量避免使用。我认为它试图匹配一个非常大的文件名。尝试使用更简单的regexp,它只允许单词匹配,并可能限制文件名的大小。例如,
\w{1,25}
或类似的东西。

这与bash有什么关系?我想这就是这个脚本所用的语言。刚刚看到标签,它在TCL。我在上面编辑了我的评论。第一行是
#/usr/bin/expect
。这是一个expect脚本,$Nick变量的内容在执行[open”/home/qbot/domki/$Nick.txt w]之前看起来很好但是我会尝试你的解决方案不确定是否这样做了,因为我没有先测试它就做了一些其他更改,但是现在可以了。谢谢你的帮助!:)你有没有尝试打印出
$Nick
中的内容,以验证你的假设,即它是一个相当短的字符串?问题可能不是文件名本身太长,而是正则表达式与您认为匹配的内容不匹配。我匹配了,它返回了{2016-08-05T23:32:42 73600565 INF Chat:'Quadro':!ustawdomek}中两个撇号之间的内容。好吧,让它工作了,谢谢您的帮助:)