我已尝试以下命令将 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
变量本身中可用)。