我正在从 Linux 上运行的脚本调用命令。在本例中,ls
列出目录内容。
ls
当我从脚本中调用时,我会执行一个简单的while
循环来逐行读取输出。
echo
然后我使用双引号打印该行,例如echo "$line"
。它确实会回显每一行,但会丢失所有样式(颜色)。
我如何在保持造型的同时仍然能够自己处理线条?
答案1
这里有两个问题。首先,您所做的处理目录中文件的方法绝对是错误的,如果您的文件名包含换行符或其他奇怪的内容,则会中断。看http://mywiki.wooledge.org/ParsingLs了解更多。
也就是说, 的颜色ls
是可选的。在许多 Linux 发行版中,该命令ls
实际上是别名,它在打印到 ttyls --color=tty
时启用颜色(例如,与循环相反)。但是,脚本中通常不会启用别名,因此当您从脚本运行时,您只是正常运行,没有颜色。ls
while
ls
ls
因此,第一个丑陋的解决方法是调用ls --color=always
.这会让你与颜色相呼应。然而,正如我在第一段中提到的,这几乎肯定是一个坏主意。一方面,如果您只想打印每一行,为什么不直接运行ls
并忘记while
循环呢?
如果您确实需要出于某种其他原因处理文件并且仍然需要使用ls
,请使用 globbing 来获取文件列表,然后ls
手动运行每个文件:
for file in *; do
ls -d --color=always -- "$file"
done
这不会因奇怪的文件名而中断,并且仍然会按照您的要求显示颜色。