我正在使用Mac ssh'ing进入无头RedHat盒子,我需要为下游程序创建一个文件列表来操作。
当我重定向ls
的输出时,创建的文件有一堆转义字符,而我的下游脚本无法正确读取文件名。当我创建文件cat
时,一切看起来都很好:
sdt5z@franklin:~/cufflinks$ ls *.pbs
01_SL8426.pbs 03_SL8428.pbs 09_SL8891.pbs
02_SL8427.pbs 04_SL8429.pbs
sdt5z@franklin:~/cufflinks$ ls *.pbs > myfiles.txt
sdt5z@franklin:~/cufflinks$ cat myfiles.txt
01_SL8426.pbs
02_SL8427.pbs
03_SL8428.pbs
04_SL8429.pbs
09_SL8891.pbs
但是如果我在vim中打开文件,这就是它的样子(所有小^[[
和^[
字符在我的终端模拟器中都是蓝色的):
1 ^[[0m^[[0m01_SL8426.pbs^[[0m
2 ^[[0m02_SL8427.pbs^[[0m
3 ^[[0m03_SL8428.pbs^[[0m
4 ^[[0m04_SL8429.pbs^[[0m
5 ^[[0m09_SL8891.pbs^[[0m
6 ^[[m
~
~
~
~
运行file命令显示该文件具有转义序列。
sdt5z@franklin:~/cufflinks$ file myfiles.txt
myfiles.txt: ASCII text, with escape sequences
我的问题是,我怎样才能简单地将文件重定向到文件,没有任何转义字符?是什么原因造成这种情况?
感谢。 myfiles.txt:包含转义序列的ASCII文本
答案 0 :(得分:5)
您的ls
看起来像是“ls --color
”之类的别名。如果你取消它,你将不会得到任何着色,这是转义字符的来源。 alias | grep ls
会告诉你。我将ls
置于不合理的位置,而是将l
之类的内容替换为“ls --color -F
”。
答案 1 :(得分:2)
在这种情况下,我认为来自ls的附加信息正在打印到文件中。 cat
命令正在使用该信息为终端中的输出着色,而vim正在显示文件中的颜色字符。
要修复,请使用以下命令ls *.pbs
/bin/ls *.pbs
通过这种方式,您可以单独保留别名,同时从ls获得所需的行为。
答案 2 :(得分:2)
您可以这样做,而不是更改别名:
\ls *.pbs
答案 3 :(得分:2)
它不明显,但你可以用echo
换行,echo
将删除所有ANSI转义字符。
(见截图)
FS结构:
daniel@synapse:/tmp/test$ tree
.
├── archive.tar.bz2
├── archive.tar.gz
├── dir1
│ └── file.txt
├── dir2
│ └── file.pdf
└── image.png
2 directories, 5 files
列出商品 - 只是商品:
daniel@synapse:/tmp/test$ for ITEM in `echo *`; do echo ${ITEM}; done
archive.tar.bz2
archive.tar.gz
dir1
dir2
image.png
列出项目 - 具有相对路径:
daniel@synapse:/tmp/test$ for ITEM in `echo ./*`; do echo ${ITEM}; done
./archive.tar.bz2
./archive.tar.gz
./dir1
./dir2
./image.png
列出项目 - 使用绝对路径:
daniel@synapse:/tmp/test$ for ITEM in `echo $(pwd)/*`; do echo ${ITEM}; done
/tmp/test/archive.tar.bz2
/tmp/test/archive.tar.gz
/tmp/test/dir1
/tmp/test/dir2
/tmp/test/image.png
修改强>
抱歉,我提供了不好的例子,我会尝试通过屏幕截图改进它们:
答案 4 :(得分:1)
看起来ls
命令认为它在终端中执行即使你正在输出输出。您可以尝试--color=never
选项:
ls --color=never *.pbs > myfiles.txt
答案 5 :(得分:1)
当你跑步时你看到了什么
$ alias
我看到以下内容:
alias ls='ls --color=auto'
系统通常非常智能,在重定向时不会着色,但您可以尝试
$ unalias ls
然后再试一次,确保你没有颜色。