如何使用linux命令将终端的输出写入新文件而不改变对齐方式?

如何使用linux命令将终端的输出写入新文件而不改变对齐方式?

我已尝试以下命令将 linux 命令输出写入新文件,但对齐方式有所不同。

ls(在终端中)

1m_complete.pl   current_sample.pl   rsdb.tcsh         
1m_complete.pl~  current_sample.pl~  getp.pl

但是在尝试 ls >> ls_out(Alignment Varies) 时

 1m_complete.pl   
 current_sample.pl   
 rsdb.tcsh         
 1m_complete.pl~  
 current_sample.pl~ 
 getp.pl

我的预期输出:

 1m_complete.pl   current_sample.pl   rsdb.tcsh         
 1m_complete.pl~  current_sample.pl~  getp.pl

答案1

ls检查 STDOUT 是否连接到终端 ( isatty(1)),如果没有,则在单独的行中输出每个文件名。

您可以改为使用ls -C >out.txt, 或echo * >out.txt来获取列格式的列表,尽管在这两种情况下,输出都不会采用ls输出到终端时所示的确切形式。

答案2

ls输出到终端或文件时的行为有所不同。

终端输出默认是列,而文件输出是每行一个文件。

只需使用

ls -C

答案3

正如其他答案所提到的,ls根据其标准输出是否是终端来改变其输出。

ls -C

强制ls使用柱状输出,但默认情况下它会格式化行,以便它们适合 80 列。如果您想获得与终端中获得的结果相匹配的输出,则需要导出该COLUMNS变量:

export COLUMNS
ls -C > output

或者,如果您只想COLUMNS指定ls

COLUMNS=$COLUMNS ls -C > output

(假设您的 shell 知道终端的当前宽度并使其在COLUMNS变量本身中可用)。

相关内容