【问题标题】:When this is executed: `"(exec -l -a specialname /bin/bash -c 'echo $0' ) 2> error"`, why it outputs `[7^[[r^[[999;999H^[[6n` to stderr执行时:`"(exec -l -a specialname /bin/bash -c 'echo $0' ) 2> error"`,为什么输出`[7^[[r^[[999;999H^[[ 6n` 到标准错误
【发布时间】:2016-04-01 01:58:49
【问题描述】:

当我进行 bash 测试时:

(exec -l -a specialname /bin/bash -c 'echo $0' ) 2> error

run-builtins 失败,经过一番搜索,我发现它输出了

^[7^[[r^[[999;999H^[[6n

到标准错误,所以我将它重定向到一个文件错误。 如果我 cat 它,它会输出一个空行。 我使用 vim 打开它,发现:

^[7^[[r^[[999;999H^[[6n

为什么?

【问题讨论】:

  • 这看起来像是设置终端窗口大小的转义序列。除此之外,我无法完全解析您要问的内容。不过,您似乎还有其他几个问题。你能重新措辞更清楚吗?
  • 谢谢,我想问一下是谁输出转义序列,exec命令还是终端?
  • exec -l 是否会向标准错误输出一个空行?
  • 这可能是提示,它进入stderr。我无法重现您的错误,但请尝试取消设置提示 -c 'PS1=;echo $0'
  • 是的,我发现子shell中的PS1是一个空行,但是当我取消提示-c 'PS1=;echo $0;echo ${PS1}'时,取消设置并没有工作,PS1也是空行。

标签: bash testing escaping character


【解决方案1】:

找了很久,发现bash读取了/etc/profile文件,在这个文件中,有以下内容:

if [ -x /usr/bin/resize ];then /usr/bin/resize >/dev/null fi 所以bash执行resize程序,这个程序是我系统busybox生成的,busybox源码console-tools/resize.c有:

fprintf(stderr, ESC"7" ESC"[r" ESC"[999;999H" ESC"[6n")

所以它输出到标准错误。

【讨论】:

    【解决方案2】:

    运行命令:

    (exec -l -a specialname /bin/bash -c 'export PS1='test';echo ${PS1}') 2> err.log
    

    vi err.log
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2014-03-17
      • 2019-10-07
      • 1970-01-01
      • 2014-10-19
      • 2011-01-30
      • 2020-08-05
      相关资源
      最近更新 更多