“watch” 命令不显示带有 Unicode 条和破折号的“tree”命令输出

“watch” 命令不显示带有 Unicode 条和破折号的“tree”命令输出

执行时

watch tree .

我得到如下输出

Every 2.0s: tree .                                   macbook.local: Fri Dec 20 16:23:33 2019

.
    hello.txt
    hi.txt
    hmm.c
    subdir
        hello.txt

1 directory, 4 files

我希望它看起来像常规的树命令输出。如下所示:

.
├── hello.txt
├── hi.txt
├── hmm.c
└── subdir
    └── hello.txt

1 directory, 4 files

我知道我可以用

while; do; clear; tree .; sleep 2; done

但我想用 watch 命令实现同样的事情

答案1

这是预期行为,因为 的输出中删除了所有不可打印字符。的页面watch中提到了这一点。manwatch

您可以尝试通过以下方式执行命令:

 watch "tree|cat -v"

答案2

设置LC_CTYPE=C可能会tree使用纯 ASCII 替代。watch命令可能是:

watch 'LC_CTYPE=C tree .'
# or (not strictly equivalent)
LC_CTYPE=C watch tree .

笔记:

  • 该设置将影响文件名中非 ASCII 字符的显示方式。
  • 您可能会遇到 的通用提示LC_ALL=C。此变量不仅会覆盖LC_CTYPE,还会覆盖LC_COLLATE和其他LC_*变量。LC_COLLATE会影响 中的排序tree

在我的 Debian 中,我可以使用--charset=C强制 ASCII 绘图而不影响文件名中的字符(所以这比使用的方法更好LC_CTYPE):

watch tree --charset=C .

虽然在 Debian 中对我来说也很好watch tree .用。另一方面watch "tree|cat -v"另一个答案生成几乎不可读的输出。显然您的设置不同(macbook.local-macOS?)。我的答案是提供可能对使用其他设置的用户有用的提示。

相关内容