我想得到与 ls 在 bash 或 python 脚本中创建的相同的输出。 我不是说列出目录,而是 ls 所做的事情是能够“循环”。示例:
# ls
a b c d
# ls | head -n 1
a
# for i in $(ls); do echo "file: $i"; done
file: a
file: b
file: c
file: d
ls怎么可以这样,调用的时候还是一行显示所有内容?
使用制表符不起作用.. 换行只是强制它是多行。\000 不起作用。
# echo -e "a\tb\tc\td" | head -n 1
a b c d
echo -e "a\000b\000c\000d" | head -n 1
abcd
cat -A 没有给我太多信息...
# cat -A <(ls --color=no)
a$
b$
c$
d$
# cat -A <(echo -e "a\nb\nc\nd")
a$
b$
c$
d$
所以.. 我怎样才能在我的脚本中生成相同类型的输出?我在这里缺少任何控制字符吗?
最佳答案
诀窍是检测输出是否为终端,在这种情况下 ls
使用或不使用列,在这种情况下它以更简单的格式输出。
在 Unix 中,您应该能够使用 Python 的 <a href="http://docs.python.org/library/os.html#os.isatty" rel="noreferrer noopener nofollow">os.isatty()</a>
获取此信息的函数。
在 shell 中,您可以使用 <a href="http://linux.die.net/man/1/tty" rel="noreferrer noopener nofollow">tty(1)</a>
程序:tty -s <&1
.如果 stdout 是 tty,这将退出 true,否则将退出 false。 tty
实际上检查标准输入,但是使用 <&1
您可以将 stdout 重定向到 stdin 以有效地检查 stdout。
关于python - 在 python 中执行 ls 输出魔术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783971/