使Emacs的eshell / echo新行行为像普通终端一样

3
我注意到当你在Emacs eshell中要求不输出换行符时,比如使用echo命令,它仍会添加换行符。
例如,在Bash中:
$ echo -n "a" | sha1sum 
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8  -

从Emacs的eshell:

$ echo -n "a" | sha1sum 
3f786850e387550fdab836ed7e6dc881de23001b  -

原因是添加了额外的一个字节:
来自Bash:
$ echo -n "a" | wc -c
1

来自eshell:

$ echo -n "a" | wc -c
2

使用hexdump命令,以下是输出结果:

$ echo -n "a" | hexdump -C
00000000  61 0a                                             |a.|

我对这个发现有点困惑:添加了一个不应该存在的“换行符”(ASCII控制码为“0a”),而“-n”选项传递给echo不应该添加换行符。
需要什么样的elisp配置魔法,使Emacs的eshell在将echo的输出导入其他命令之前不添加换行符?
P.S:Debian Linux上的Emacs 24.3.50.1。
1个回答

2

eshell-echo 看起来颠倒了 -n 的典型含义(在sh/bash中),这可能是不幸的。(如果您键入echo -h,它会告诉您这一点。)

此外,如果eshell-plain-echo-behavior 非空,则会在参数末尾强制换行。

因此,您希望该变量为nil,并且使用没有-n 参数的echo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接