技术解析

粘贴命令并回车,会提示找不到命令,诡异的是手动输入命令就没问题。
0
2021-06-17 16:10:38
idczone

在 bash 里,我安装了 fail2ban,想查看是否启动成功,我粘贴一句网上看到的命令 sudo fail2ban-client ping,然后给我返回的是 bash: sudo fail2ban-client ping: No such file or directory,在 zsh 里输入同样的内容,返回 zsh: command not found: sudo fail2ban-client ping

如果输入了错的命令,zsh 会把输入的内容变为红色,然后我尝试着手动输入 sudo fail2ban-client ping,同样的命令,居然变绿了?回车一看,返回 Server replied: pong

很奇怪喔,为什么粘贴不行,手动输入就可以的?而且手动输入成功了之后,粘贴命令还是不行,假如我粘贴了两次命令,都是不行了之后,按上箭头,第一句命令还是红色的,回车也是不行。但是按两次上箭头,命令居然变绿了,按回车是正常返回???

真把我搞蒙了,有没有人能解释下这个有趣的现象?而且这个情况只出现在 sudo fail2ban-client ping 命令上,其他的我没遇到过。


你这明显是三个命令,sudo,fail2ban-client 和 ping,上面两次被解析成一个命令了。至于为什么,我也不知道。( shrugs )

空格是标准的么。粘到记事本里再粘 bash 试试

大概率非标准空格导致的

应该是 sudo 前面有个非标准空格或其它非可见字符被你一起 copy 了。试试用 echo "你拷贝的命令" | hexdump -C 看看

破案了!
粘贴到 Sublime Text 3 上,果然不是标准空格,把空格重新改一下就可以了,谢谢各位。
输出:
❯ echo 'sudo fail2ban-client ping' | hexdump -C
00000000 73 75 64 6f c2 a0 66 61 69 6c 32 62 61 6e 2d 63 |sudo..fail2ban-c|
00000010 6c 69 65 6e 74 c2 a0 70 69 6e 67 0a |lient..ping.|
0000001c

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服