使Emacs eshell / echo换行符在常规终端中表现得像

时间:2014-01-30 03:22:56

标签: shell emacs elisp newline

我注意到,当你要求echo不在Emacs eshell中输出尾随换行符时,它仍会添加它。

例如,来自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.|

我对这一发现感到有些困惑:已经添加0a("新行"的ASCII控制代码),它们不应该存在(传递给echo的" -n"选项应该不添加换行符。

需要什么样的elisp配置魔法让Emacs'在将echo的输出传递给其他命令之前eshell没有添加换行符?

P.S:Debian Linux上的Emacs 24.3.50.1。

1 个答案:

答案 0 :(得分:2)

eshell-echo似乎颠倒了-n的典型(sh / bash)含义,这可能是不幸的。 (仅供参考,如果您输入echo -h,它会告诉您。)

此外,如果eshell-plain-echo-behavior为非nil,则会强制换行到参数的末尾。

所以你想要那个变量nil,并且你想使用没有echo参数的-n