我只是注意到,在我的其中一台机器上(运行Debian Sid),只要键入ls
任何带空格的文件名,都将单引号引起来。
我立即检查了别名,却发现它们完整无缺。
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
另一个测试,文件名称中包含单引号(也回答jimmij的请求):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
使用新的coreutils-8.26输出进行更新(虽然它的混乱程度要小得多,但是默认情况下仍然很烦人)。感谢PádraigBrady的此打印输出:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
为什么会这样呢?如何正确停止?
为了澄清,我本人将ls设置为自动彩色输出。它从来没有把引号括起来。
我正在运行bash
coreutils 8.25。
编辑:似乎coreutils开发人员认为(链接)是一个好主意,尽管打破了最少惊讶的原则以及UNIX已有46年以上的历史,但仍使其成为全球默认值。
有什么方法可以解决此问题而无需重新编译?
更新-2017年10月-Debian Sid默认情况下重新启用了外壳转义引用。这太荒谬了。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
在上一个错误报告的回复链的底部,“更改是有意的,并将保留。” https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
我以为这已经解决了。显然不是。
更新:2019年4月:刚刚在PHP中发现了一个伪造的错误报告,该错误报告是由对的更改引起的ls
。当您使开发人员感到困惑并生成错误的错误报告时,该重新考虑您的更改了。
更新:Android toyboxls
现在正在执行类似的操作,但是使用反斜杠而不是引号。使用-q选项可使空格呈现为“问号字符”(由于它们显然不是空格,所以我没有检查它们是什么),因此到目前为止,我发现的唯一解决方法是不添加有问题的设备启动脚本时将其提供给脚本并提供源代码。ls
如果在终端中,此功能将使用列,否则每行打印一个,而ls
逐字逐字地进入打印空间,因为它是通过管道运行的。
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C $@ |cat
else
/system/bin/ls $@ |cat
fi
}
前言:虽然赞成这样的答案并每天称呼它可能会很令人满意,但是请放心,GNU coreutils的维护者们并不在乎SO的答案票;如果您实际上想鼓励他们改变,您可以需要按照此答案的描述给他们发送电子邮件。
2019年更新:
去年的某个时候,维护人员已经加倍努力,现在向所有[email protected]报告有关此问题的信息只是一个样板答复,指出他们网站上的页面长得令人难以置信,列出了人们对此更改所遇到的问题,他们承诺要无视。
[email protected]报告带来的不断压力显然已经产生了作用,迫使这一庞大而荒谬的页面的产生,并有可能将愿意处理该问题的维护人员数量减少到一个。
当这么多人认为某件事是一个错误时,无论维护者是否同意,这都是一个错误。
继续向他们发送电子邮件仍然是鼓励变革的最简单方法。
“为什么会这样? ”
几位coreutils维护者决定,他们比几十年来的事实标准更了解。
“我如何正确停止它? ”
http://www.gnu.org/software/coreutils/coreutils.html:
错误报告
如果您认为自己在Coreutils中发现了错误,请尽可能完整地将错误报告发送到<[email protected]>,它将自动输入到Coreutils错误跟踪器中。在报告错误之前,请阅读常见问题解答。关于如何编写错误报告和提出良好问题的非常有用且经常被引用的指南是文档“如何以明智的方式提出问题”。您可以浏览以前的帖子并搜索bug-coreutils档案。
已还原 此更改的发行版:
发行版不受影响:
“有什么方法可以解决这个问题而无需重新编译? ”
支持者会让你...
通过在其ls别名中添加-N来恢复旧格式
…在永恒的余下时间里,无论您身在何处,都可以在所有装置上进行安装。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句