【问题标题】:`echo -n` prints nothing`echo -n` 什么也不打印
【发布时间】:2014-04-24 16:46:37
【问题描述】:

我使用this question 去除字符串中的换行符,但我在一台主机上遇到了问题。

出于某种原因,/bin/echo -n foo 在该主机上不打印任何内容。我不知道为什么那个主机表现得很奇怪。 /bin/echo foo 工作正常。这不是终端,因为echo -n foo > /tmp/bar 也没有显示任何内容。

/bin/echo --help 说这是应该工作:

Usage: /bin/echo [OPTION]... [STRING]...
Echo the STRING(s) to standard output.

  -n             do not output the trailing newline
  -e             enable interpretation of backslash escapes
  -E             disable interpretation of backslash escapes (default)
      --help     display this help and exit
      --version  output version information and exit

% /bin/echo --version
echo (GNU coreutils) 5.97

什么可能导致这不起作用?这个 bash-shell 中会不会有一些奇怪的缓冲?

【问题讨论】:

  • 你也可以使用printf
  • 是的。我让它与tr -d '\n'一起工作。但我想知道该主机上的echo 有什么问题。
  • 谁知道?顺便说一句,echo 也是一个内置的 bash。不确定您使用的是哪一个。
  • 你确定它什么都不打印吗?也许输出正在被您的 shell 提示符覆盖。试试/bin/echo -n foo | wc。 (我知道你说过 echo -n foo > /tmp/bar 什么都没有显示;你是否通过运行 cat /tmp/bar 来检查?)
  • @keith-thompson:是的,我尝试了cat,但我没有尝试wc。好主意!问题是终端,而不是echo。很奇怪。可能是我的LS_COLORSINPUTRC

标签: bash echo newline


【解决方案1】:

根据 cmets 中的信息,/bin/echo -n foo 似乎正在产生预期的输出,但它正在被您的下一个 shell 提示符覆盖。 (很可能是您的外壳,而不是您的终端设置。)

你可以通过运行来证明这一点

/bin/echo -n foo | wc

应该产生这个输出:

  0       1       3

你也可以试试这个:

/bin/echo -n foo ; sleep 5

这将使您的下一个 shell 提示延迟 5 秒,因此您可以在输出被覆盖之前看到它。

(你用的是什么shell?$PS1的值是多少?)

【讨论】:

  • @cdunn2001: 再说一遍,你用的是什么外壳? (您在问题中提到了 bash,但这看起来像 zsh 语法。)
  • 可能是 zsh。但我在该主机上没有 homedir。
  • @cdunn2001:你仍然可以知道你正在使用什么外壳,例如echo $ZSH_VERSION。你试过我的建议了吗? (我想知道为什么你没有主目录,但它可能不相关。)
  • 是的,你的睡眠建议证明你是对的。 ZSH_VERSION 是4.2.6
猜你喜欢
  • 2012-06-26
  • 2012-07-25
  • 2016-06-12
  • 2012-11-24
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多