如果我在命令替换中使用 BASH 内置的“cd”,它会将额外的内容打印到标准输出,但只有通过管道传输到 less 时才会这样。
$ echo `cd .`
# The output is a single newline, appended by echo.
$ echo `cd .` | less
# less displays:
ESC]2;my.hostname.com - tmp/testenv^G
(END)
那里发生了什么?此行为未记录在 cd 的 bash 手册页中。显然,在命令替换中仅运行“cd”是愚蠢的,但类似
NEWDIR=`cd mypath; pwd`
可能会有用。
我通过使用来解决这个问题
NEWVAR=`cd mypath > /dev/null 2>&1; pwd`
但我还是想知道发生了什么。
Bash 版本:GNU bash,版本 3.2.25(1)-release(x86_64-redhat-linux-gnu)版权所有 (C) 2005 Free Software Foundation, Inc.
发行版:Scientific Linux SL 版本 5.5 (Boron)
答案1
您看到 xterm 转义序列 ( ESC 2; new-title^G ) 用于更改窗口标题。
(以下内容大部分为猜测。)
当您将输出写入终端时,终端仿真器(我猜)会先将其从流中删除,然后再将其显示在屏幕上。当您通过 less 管道传输输出时,您会看到所有输出。
检查的值$PROMPT_COMMAND
;您可能会在那里看到一个打印字符串的命令(可能涉及$PWD
或调用pwd
)。