欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ls --color的使用

程序员文章站 2024-03-18 13:00:46
...

1,问题的发现:

今天写了一个句非常简单的shell,结果发现和预期的结果不同:

$ ls -1 | tail -1
$

本意是获取当前目录下默认排序的最后一个文件,可是却没有能够拿到任何信息。

可是我写在一个脚本里的这句话却得到了正确的结果:

$ cat test.sh
#!/bin/bash
ls -1 | tail -1
$ ./test.sh
test.sh

最后发现是因为我的当前bash下,ls是被我使用了别名:

$ type ls
ls is aliased to `ls -F --color'

关键就在

$ /bin/ls -1 | tail -1
test.sh

于这个--color  去掉后就好了. 应该就是--color的颜色控制字符导致的,但是为什么最后一行为空就没有仔细研究了。

2, 问题的解决

如何解决这个问题呢,看了ls的help文件后,有这样一句:

With --color=auto, color codes are output
       only if standard output is connected to a terminal (tty)

所以使用--color=auto就好了。

$ ls --color | tail -1
$ ls --color=auto | tail -1
test.sh*

3, 问题的发展

回家后发现和ls的版本也有关系

$ /bin/ls --color | tail -1
$ /usr/local/bin/ls --color | tail -1
Workspace

$ /bin/ls --v
ls (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard Stallman and David MacKenzie.
$ /usr/local/bin/ls --v
ls (GNU coreutils) 8.12
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard M. Stallman and David MacKenzie.

但是无论如何,--color=auto是最保险的。

自己常用的还有grep --color 也改用了 --color=auto  ^_^ 只是最简单的记录

转载于:https://my.oschina.net/maxio/blog/519320